为什么有的网站post能成功,而有的网站却不能通过?什么原因?

解决方案 »

  1.   

    我估计你是直接POST,有些网站,如ASP的网站,就应该先随便发个GET或POST请求过去,然后从返回数据中提取出Cookie,经过处理后,然后再去POST,不过这次POST要将Cookie加进请求头中。简单的说就是要先建立一个Session,然后再请求
      

  2.   

    我用同样的方法post到我自已的asp网站(要求用户名和密码和session),都能成功通功。可是当我post到其它网站,同样的方法,却不能成功,为什么?是不是这些网站,采取了什么技术?不允许用socket的post方法呢?而同样用wininet的post却能成功!这是为什么呢?
      

  3.   

    下面是反回应答:
    HTTP/1.1 400 Bad Request
    Date: Thu, 25 Sep 2003 09:25:41 GMT
    Server: Apache/1.3.28 (Win32) mod_gzip/1.3.26.1a
    Connection: close
    Content-Type: text/html; charset=iso-8859-1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>400 Bad Request</TITLE>
    </HEAD><BODY>
    <H1>Bad Request</H1>
    Your browser sent a request that this server could not understand.<P>
    Request header field is missing colon separator.<P>
    <PRE>
    username=word&amp;password=123</PRE>
    <P>
    <HR>
    <ADDRESS>Apache/1.3.28 Server at 193.119.128.6 Port 80</ADDRESS>
    </BODY></HTML>
      

  4.   

    同样的代码在我的iis+asp下能正常通过!!!请高手指点……
      

  5.   

    看看对方是怎么判断的。如果对方只支持get,你用post,当然出错。还有,如果对方有cookie验证,你也会出错。你抓抓ie的包,看看,哪个链接setcookie,自己模拟一下,就OK。
      

  6.   

    出错返回页面2:
    HTTP/1.1 405 Method not allowed
    Date: Thu, 25 Sep 2003 12:03:07 GMT
    Server: Microsoft-IIS/5.0
    Vary: *
    Allow: OPTIONS, TRACE, GET, HEAD
    Content-Length: 3923
    Content-Type: text/html
    X-Cache: MISS from 193.119.128.6
    Connection: close<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    <html dir=ltr><head>
    <style>
    a:link {font:8pt/11pt verdana; color:FF0000}
    a:visited {font:8pt/11pt verdana; color:#4e4e4e}
    </style><META NAME="ROBOTS" CONTENT="NOINDEX"><title>The page cannot be displayed</title><META HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252">
    </head>
      

  7.   

    是不是不支持post啊,那我该怎样提交呢?要是不支持的话,为什么我用wininet却能post成功呢?
      

  8.   

    你用wininet能post成功,就是cookie的事情,wininet是程序自动添加cookie的,而你用自己编的socket,只能自己写cookie.你看看我以前的贴子,都回答过了。
      

  9.   

    首先,感谢philis(明天会更好)大哥对我的帮助!上次的的问题我已看了好多篇,已解决,谢谢!现在的问题是,我第一次post,就不成功,还没有进入set cookie就已经出错了,而且,这两个网站的内容是一样的,都是同一个asp程序,只不过一个是在我自已电脑服务器上运行,一个是国外的服务器,所以………我不太明白为什么?
      

  10.   

    有些网页并不严格区分Post或者Get请求,两个一般只是在发送形式上不一样,后者把参数附着在URL的后面,前者则附加在附加数据后面。同样的数据采用两种法有时都是可行的。这主要取决于ASP或者Form数据的方法。比如Request("Password")不在区分Get或者Post请求。楼主可以采用iris或者EffeTechHTTPSniffer.exe跟踪IE发送的请求,然后按照抓获的请求包格式原样照发。注意包括UserAgent必须一样,有些网站会通过这个请求头判断你采用的客户端,如果不是IE则会导向到一个错误网页。
    另外一个工具是采用Visual Studio.NET提供的Microsoft Application Test工具进行脚本录制,然后按照录制的脚本构造请求头发送http请求。无论你采用socket或者是Wininet api或者是xmlhttp组件,只要你构造的http发送包和ie发送的请求包一模一样,服务器端是无法判断你采用何种手段链接到服务器端。
    post请求一般会产生302重新定向,这是往往需要向返回应答包的loaction字段指出的url重新发送请求。
      

  11.   

    HTTP/1.1 405 Method not allowed
    Date: Thu, 25 Sep 2003 12:03:07 GMT
    Server: Microsoft-IIS/5.0
    Vary: *
    Allow: OPTIONS, TRACE, GET, HEAD......
    这一段,是不是在说不允许post啊,会不会这个网站禁止使用socket的post呢?
      

  12.   

    405状态码一般很少返回,根据你提供的应答信息Allow: OPTIONS, TRACE, GET, HEAD......,说明可以使用Get、Trace、Option、Head请求,你不妨采用get请求替换post请求发送
    Get /login.cgi?username=a&password=b
    host:www.sina.com.cn
    cookie; xxxxxxxx
    .....
    你最好先跟踪一下浏览器,看一下浏览器采用的发送方法。
      

  13.   

    决对不可能的。如果你用wininet可以post成功,就没有理由用socket post不成功。可能还有其它暗桩,比如,ageint,host,还有reference,你把IE的包头抓下来,严格模拟IE的头去做,对方就认为你是IE在提交表单,你连自己的操作系统是什么也可以改的。
      

  14.   

    记得N久前的etchat就是检查reference,如果不是从他的网页上引用的,就不让进。现在好多网站为了防止盗链,也使用该技巧。
      

  15.   

    问题已解决!谢谢楼上各位高手!再次感谢 philis(明天会更好)大哥的帮助,谢谢!!