如何用TClientSocket实现对http服务器发POST请求???csdn一周多了上无人回答. (100分)

  • 主题发起人 主题发起人 Benesoft
  • 开始时间 开始时间
B

Benesoft

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用TClientSocket实现对http服务器发POST请求??
csdn上的问题:
http://expert.csdn.net/Expert/topic/1777/1777223.xml?temp=.6323358
不要使用indy之类的控件,我要用TClientSocket实现,当然能用socket API编程实现也可,
另外不要用网上或书的一些例子,那些都不行,用不了,大部分是HTTP没有回映.
我被这个问题闷了蛮久了,特来问大家...[:D]
希望给出具体的源程序...
 
HTTP 1.0 的请求头有特定的格式,
你可以拦截一个,然后对其中的部分内容进行更改,
然后用Socket直接发送出去,之后,等待并接受内容就可以了
 
终于有人说话了。
那些格式都搞定了。异步方式现在我也实现了,但同步方式就不会了,总是收到了,原因
不明?
 
我也不懂。帮你顶一下
 
直接发字符串就可以了,
 
晕!什么回答。
 
我再这里也问过类似问题,很久没人回答,关注,期待回答
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1821496
 
通讯都解决了。但用是的异步方式,因为这种方式不好控制。
现要使用同步方式,晕啊,搞不定。。。
 
to phpexpert 你这个好解决。"GET /login.asp?usrname=abc&pwd= HTTP1.1 '.
就行了,这是关键的一句.其他的一些报头是不能省的.
POST只是将参数放在报头之后.
 
呵呵,关键是连接如何创建不知道哦。
能给点关键代码吗?创建socket连接,发送http命令给服务器
:-)
 
看了一下你在csdn上的代码,尝试着使用,还是不行

获得不了内容
 
那是所谓的同步方式,不行。应为这样:
var
cs:TClientSocket;
CR:string;
begin
CR:=#13+#10;
cs := TClientSocket.Create(self);
cs.Address := '127.0.0.1';
cs.ClientType := ctBlocking;
cs.Port := 80;
cs.Active := true;
cs.Socket.SendText('GET /default.htm HTTP/1.1'+CR);
cs.Socket.SendText('Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*'+CR);
cs.Socket.SendText('Accept-Language: zh-cn'+CR);
cs.Socket.SendText('Accept-Encoding: gzip, deflate'+CR);
cs.Socket.SendText('User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)'+CR);
cs.Socket.SendText('Host: 127.0.0.1:80'+CR);
cs.Socket.SendText('Connection: Keep-nonAlive'+CR);
cs.Socket.SendText(CR);
cs.Socket.SendText('Connection: Keep-nonAlive'+CR);
cs.Socket.SendText(CR);
end

然后在TClientSocket的onRead事件中写入:(关键)
memo1.Lines.Add(cs.Socket.ReceiveText());
即可。
 
程序里tclientsocket是create生成的,它有onread事件吗?请教,多谢[?]
 
有呀。如果你是用代码方式生成组件。那估计不好办了。因为那样要用同步方式。这个地方我就是无法解决。
 
异步效率高,不过你上面的那个代码够垃圾的[:D]
 
效率高那是肯定的。但有时有许多问题。不能异步。。
垃圾是有点垃圾。那些我只是从IE的报头中得到的。于是我就给搞下来了。
真正有用就是第一句:“GET。。。。。”
 
我搞了这么久的winsock,还不知道什么是不能异步?
 
天,说到这里就不好玩了。。。。
我只是说我需要用同步方式解决。。。。
其实。。。。
也不想说了。。。
 
你要做的用异步一样解决,速度还要快一点,而且你不用写线程啊,为什么要同步了?
 
做这个最适合用wininet函数, 他支持https,方便快界!
 
后退
顶部