2016-09-12 62 views
1

编辑:我需要在基于delphi的应用程序脚本引擎内与TTCPBlocksocket进行POST连接。德尔福突触TTCPBlockSocket

如何判断突触何处首部结束和主体(帖子元素)开始?或者我应该发送他们在不同的数据包?谢谢 !

begin 
    Head:= TStringList.Create; 
    Head.Add('GET/HTTP/1.1');   
    Head.Add('Accept: */*'); 
    Head.Add('Accept-Encoding: gzip, deflate'); 
    Head.Add('Host: www.google.ru'); 
    Head.Add('Connection: Keep-Alive'); 
    Head.Add(#10#13); 

    body:= TStringList.Create; 
    body.Add('username=adr'); 
    body.Add('login=adr'); 
    body.Add('password=adr'); 
    body.Add('r_password=adr'); 
    body.Add('submit=register'); 


    Socket:= TTCPBlockSocket.Create;  
    Socket.connect('108.167.137.28', '80'); 
    if (Socket.LastError <> 0) then Exit; 
    Socket.SendString(Head.Text);  
+0

谢谢大卫,我编辑了这篇文章,希望现在更容易理解。 –

+0

我读过mcve指南,很遗憾,由于不是免费的,我无法共享重现错误所需的程序。我已经发布的代码的和平是只是为了得到什么,我试图完成一个想法,我想我的主要问题是很清楚的,它只是basicly如何形成一个HTTP POST包,感谢您的支持! –

+0

首先,你上面的例子是错误的。 GET请求不能有一个主体,你需要'POST'来代替。其次,Synapse有一个['THTTPSend'](http://synapse.ararat.cz/doc/help/httpsend.html)类,你应该使用它来做HTTP请求。不要直接使用'TTCPBlockSocket'来手动实现HTTP。在上面的例子中,你会使用'THTTPSend.HttpPostURL()'方法发送你的'name = value'对。 –

回答

1

解决了这个话题 - How are parameters sent in an HTTP POST request?

的内容的HTTP标头后穿上。 HTTP POST 的格式为具有HTTP标头,后跟一个空行,后跟 请求主体。 POST变量作为键值对存储在 正文中。