2013-09-01 97 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

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