关于编程实现HTTP Post功能的问题,200分+(200分)

W

wingsn

Unregistered / Unconfirmed
GUEST, unregistred user!
在IE里面点击submit一个method为post的表单,表单中想要post的内容是
testid(value=45)和testac1(value=开始), 它会发出类似如下的请求:
POST /test/test2.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword,
Referer: http://202.38.83.57/test1.asp?id=3
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)
Host: 202.38.83.57
Content-Length: 25
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: yourname=wingsn; SESSION=KCLKFCDIBEIFMJPOMKCBN

testid=45&testact1=%BF%AA%CA%BC

其中 Cookie: yourname=wingsn; SESSION=KCLKFCDIBEIFMJPOMKCBN是原来的Cookie,
到底哪个部分是post的data?还是它把post data作为cookie的一部分?我用
一些工具(比如delphi的nmhttp控件)post一个请求的时候都是第一个包发出header,
post data在第二个包里,而IE都在一个包里发过去。。。 并且在nmhttp里如果设置
postdata为字符串'testid=45&testact1=开始'的话,连等号也会被解释成%xx的格式,
时间紧张,看RFC也看的稀里糊涂,哪位大侠熟悉这个的帮我解释一下?delphi
下用什么控件能达到和IE完全一样的post效果? 我试着用nmhttp.sendstream倒是可以
发出去,但是如何接受返回信息? 谁能贴一下完整的解决代码,再加200分!
 
程序中POST的数据是空行后的数据,分包分的应该是IP包,不是TCP包,
HTTP是基于TCP的应用,IP分包对其来说是透明的,可不关注。

NMHTTP控件中的POSTDATA在发送前都会经过一次HTTP的编码,而截获的包
是已经经过HTTP编码再发送出去的,把截获的包内容原封不动的拷贝下来
再作为POSTDATA发送自然会有不一致的地方。

我写过HTTP的小东西,用的是Dephi 6的TCPCLIENT,自己组装HTTP的head和
data再发送,其实也不太复杂。不过源码功能太乱,而且还不在这里。^_^
另外用SOCKET也照样可以完成。
 
关注!
我以前的想法是先生成一个自动Post的网页,然后用IE去Navigate。
 
建议你用D6中带的INDY控件,以前我是用的ICS也比较好!你到网上很容易
找到这个控件的下载。我做过这类的小程序,没有什么问题!D5中的FastNet
这类控件有很多的Bug,所以建议你不要用这类控件!
 
多谢大家的解释,因为兼容性的原因, 现在只能用delphi5编译,我已经改用indy
的那套控件了,谁能再说说用那个tcp client怎么实现一个http请求?发送和接收
前后要做哪些工作?
 
接受答案了.
 
TO:passion
你说
==============================================
我写过HTTP的小东西,用的是Dephi 6的TCPCLIENT,自己组装HTTP的head和
data再发送,其实也不太复杂。不过源码功能太乱,而且还不在这里。^_^
另外用SOCKET也照样可以完成。
==============================================

如果http服务器需要验证信息,也就是说http头中你必须发送authorization部分的信息,
你如何获得该部分的信息呢???

请赐教!

 
顶部