2013-09-01 65 views
0

主要任务是通过Delphi程序进行POST自动化。使用REST客户端我发现,具有网站和两个标头的URL:* login_email *和* login_pass *我可以成功获取HTML代码,并且我的POST授权形式正常,我已登录。德尔福XE的POST请求

但是,我写了这个德尔福代码:

DataToSend := TStringList.Create; 
DataToSend.Add(''); 

IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; 
IdHTTP1.Request.CustomHeaders.AddValue('login_email','some_email'); 
IdHTTP1.Request.CustomHeaders.AddValue('login_pass','some_password'); 

Memo1.Lines.Add(idHTTP1.Post('http://url.com', DataToSend)); 

我的自定义标头没有URL编码。

我看到的请求头:

Server: nginx/1.0.8 
Date: Sun, 01 Sep 2013 17:03:59 GMT 
Content-Type: text/html; charset=windows-1251 
Connection: close 
X-Powered-By: PHP/5.2.6-1+lenny16 
Vary: Accept-Encoding 

但ontained HTML是相同的页面,为此,POST请求已经与未处理的形式发送。

我在做什么错?

+0

有些服务器拒绝由于Indy设置的默认'User-Agent'的请求。如果这是您的情况,您可以尝试使用最喜欢的浏览器之一来填充“IdHTTP1.Request.UserAgent”属性,以伪造您所浏览的服务器。但这只是我的猜测(而且经常出现问题)。 – TLama

+0

我添加了Mozilla/5.0(Windows NT 6.1)AppleWebKit/537.36(KHTML,如Gecko)Chrome/29.0.1547.62 Safari/537.36作为UserAgent,但没有任何更改。 –

回答

4

POST请求参数永远不会包含在HTTP标头中。 试试这个:

DataToSend := TStringList.Create; 
DataToSend.Add('login_email=some_email'); 
DataToSend.Add('login_pass=some_password'); 
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; 

Memo1.Lines.Add(idHTTP1.Post('http://url.com', DataToSend)); 
+0

是的,它的工作原理。谢谢! –