我抓包到这样一个POST数据:
POST /exporter/sendCsLeadsAction.html HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*Referer: http://exporter.alibaba.com/exporter/registry.html?srctrace=y&originType=50Accept-Language: zh-cnContent-Type: application/x-www-form-urlencodedUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022)Host: exporter.alibaba.comContent-Length: 1238Connection: Keep-AliveCache-Control: no-cacheCookie: ali_apache_id=221.232.223.51.1204690406902.0; __last_loginid__=kezhon; ali_apache_track=c_mt=2|c_mid=kezhon|c_lid=kezhon|c_ms=1;_intl_temp_other_=/z2HMndRfnwramL4FO/BB/Gt82aZ2PyoTRSiosV4cFEqfPmAC52wBhRx+Vu7SgdE; ali_apache_tracktmp=; ali_apache_sid=211.69.161.68.1207216999217.8|1207218815; JSESSIONID=DB1872374DA672B97E0C5A3A11EAAAA5name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82&notCNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&[email protected]&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&re=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98有这样几个疑问:
1:浏览器怎么确定在POST时需要加哪些标题字段,因为我发现不同网站的表单提交时POST标题字段都不一样,浏览器根据什么确定的?
Accept:
Referer:
Accept-Language: 
Content-Type:
UA-CPU:
Accept-Encoding: 
User-Agent:
Host:
Content-Length:
Connection:
Cache-Control:
Cookie: 2:cookie里面都是些什么信息,浏览器怎么确定需要包含哪些信息?3:是不是Form中所有的元素包括所有的Input和Select的name=value对全部需要提交,包括type="hidden"这一类元素?如果不是全部都提交的话浏览器怎么确定哪些需要提交哪些不需要?

解决方案 »

  1.   

    1,这叫做HTTP Message header,根据很多因素而定,不过除了referer和cookie字段,其它对于控制IE自动提交表单都不大重要。referer就是你提交表单按钮所在的网页的链接,cookie是以前服务器发送过来的,只要域名相同,都会自动发送给服务器。
    2,cookie的信息客户端并不关心,只是原样发送给服务器,cookie的发送策略见1。
    3,全部提交,不论隐藏与否
      

  2.   

    教材上的名称好不好?UA-CPU: 、referer这些不是标题字段吗?
      

  3.   

    根据哪些因素确定呢,除了referer和cookie字段其他的是不是都可有可无?
    为什么发现我上面那个案例里面的隐藏域input元素没有提交呢?
      

  4.   

    比如:Accept-Language是在IE里面设的。具体你要看HTTP协议对字段的定义,如果你是在协议级别
    操作,你必须熟悉这些字段,如果是IE控件级别,你就不需要了解了。>>为什么发现我上面那个案例里面的隐藏域input元素没有提交呢?
    用 HTTPWatch来观察
      

  5.   

    非常非常感谢您的细致讲解!
    其实我想做个模拟浏览器提交表单的程序,但是我并不想一个网站一个网站地实验抓包分析来确定需要POST哪些数据。不知道光通过分析网页HTML能不能得到所有的信息,所以我问你浏览器是怎么确定那些标题字段的,因为单从网页上找不到这些信息!
    照你的意思,是不是这些字段并不涉及浏览器与服务器的对应交互,而只是浏览器自己设置的选择而已?
      

  6.   

    如果一定要从http级别的话,首先应该理解每个字段的意思。这些字段,每个字段都是有意义的。有些字段是给http服务器用的,比如Accept-Encoding,是告诉服务器,是否可以发送比如zip后的数据过来。User-Agent是客户端类型,这是很多服务器端的PHP脚本会判断的。建议去看HTTP协议,理解了,就知道那些字段要填充了。其实,我建议自动化IE来提交表单,这样就不用管这些细节了,只需要每个表单写一个简单Javascript就可以提交。性能虽然没有http协议级别来得快,不过更加方便,更加可编程。性能上每分钟提交四五十个不在话下。
      

  7.   

    您的意思是不是给提交页面中加一些javascript,由javascript来填充表单并发生submit点击的事件,然后借助浏览器就自己完成整个提交过程了?
    如果是这个思路的话我之前也小小实验过,但是具体到vc编程里面,我不知道怎么来读取这个更改之后的网页,并制止返回页面弹出的窗口!
      

  8.   

    eduyu回答基本完整,不过有一点小小的遗漏,form提交时不一定提交所有的input,如果form中存在两个以上的submit类型的input的话,这些submit最多提交一个出去,也就是提交获得活动焦点的那个submit,其它的submit都不提交。
      

  9.   

    但是我依然不明白浏览器是怎么确定需要向服务器提交哪些Header字段的?
      

  10.   

    把form中的所有input都用name=value的形式构造,然后用&连接到一起就是要post提交的数据。当然type=img的元素被忽略,type=submit的情况下,如果只有一个submit,则也忽略,如果有多个submit,则寻找有焦点的那个submit,然后用submit=name形式再连接到post数据的后面
      

  11.   

    我是说浏览器怎么确定这些"Hearder"字段:
    Accept:
    Referer:
    Accept-Language: 
    Content-Type:
    UA-CPU:
    Accept-Encoding: 
    User-Agent:
    Host:
    Content-Length:
    Connection:
    Cache-Control:
    Cookie:  
    哪些需要哪些不需要???
      

  12.   

    这个问题eduyu已经解释得很清楚了,大部分都是浏览器自动加上的,有些信息是前一个页面返回的时候设定的,比如cookie。浏览器会尽可能详细的设置请求头,至于到底该设置哪些内容,最好还是先去了解一下HTTP的规范,看了规范就什么都明白了。
      

  13.   

    那照这么说,是不是除了cookie和Referer之外,其他的字段都由浏览器自己来决定,而并不是相应服务器要求的结果?
      

  14.   

    还有像:name=%E7%8E%8B%E5%B2%9A这个name=value对的value部分是什么格式的编码?
      

  15.   

    %E7%8E是URL编码,通常用js代码来设定,js都提供了对应的编解码函数,浏览器自身并不负责这种编码解码。
    其它的问题,我还是建议看规范,比一个一个问强得多
      

  16.   

    %E7%8E是中文字符的URL编码,正如这个的区位码就是8EE7,用中文的转换方法可以转换
      

  17.   

    escape('中文')  -->%??%??%??%??