2013-09-01 7 views
0

Основная задача - авторизовать POST через программу Delphi. Используя REST Client, я обнаружил, что, имея URL-адрес сайта и два заголовка: * login_email * и * login_pass *, я могу успешно получить HTML-код и мою форму авторизации POST в порядке, я вошел в систему.POST-запрос в Delphi XE

Однако, Я написал этот код Delphi:

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

Некоторые серверы отклоняют запросы из-за установленного пользователем «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

Да, это работает. Спасибо вам! –