В этой статье я хотел бы рассказать о посылках (отправке) POST-запросов на сервер (сайт). Получение капчи мы прошли, а в некоторых случаях Вам значени капчи надо отправить на сервер например и зарегестироваться на сайте каком-нибудь программно. Вообще в этом случае невозможно узнать, что шлет браузер при регистрации на каком-нибудь сайта (какой заголовок, куки — если есть, кодировку и так далее). И соответсвенно без указания этих данных можно и вообще не зарегестироваться на сайте (я говорю сейчас про регистрацию из программы). Регистрацию (отправку запроса) предлагаю производить с помощью TidHTTP, который находится на вкладке Indy Clients. Да про этот компонент мы уже много говорили, но про отправку post-запросов ни разу. Так вот, многие сайты могут обработать (получить) запрос без указания — кук, заголовка, кодировки, версии браузера и так далее, это круто конечно, так как ничего ненадо узнавать, что шлет браузер, а сервер запрашивает, но в некоторых случаях это нужно будет сделать. Для этого есть много сервисов, программ, которые показывают данные которые посылаются на тот или иной запрос (например программа — HttpAnalyzerStdV5), эти все данные мы сможем и указать в нашем компоненте. Основные из них, которые можно заполнить это (открыть необходимо свойство Request):
- Host
- Referer
- UserAgent
- AcceptCharset
- AcceptEncoding
Также нам потребуется компонент TidAntiFreeze.Теперь для отправки запроса, нам надо сформировать данные, которые мы будем отправлять на сервер, сайт или еще куда-то, в скрипт может. Для этого я буду использовать переменную типа TStringList. Для того, чтобы отправить точный post-запрос на сайт, нам необходимо просмотреть код исходной страницы сайта, на которую мы хотим отправлять запрос. И увидеть нашу форму (тег
procedure TForm1.Button1Click(Sender: TObject);
var
PostData:TStringList;
html:WideString;
begin
try
PostData:=TStringList.Create;
PostData.Clear;
PostData.Add('name=123');
PostData.Add('pass=333');
PostData.Add('cap=444');
html:=IdHTTP1.Post('www.site.ru',PostData);
PostData.Free;
except
on e:Exception do
PostData.Free;
end;
end;
Теперь можете залезть на сайт, куда вы посылали запрос и посмотреть есть ли там эти данные. Если Вам надо пропарсить страничку сразу после того, как мы отправили запрос, например авторитизировались на сайте и нам надо полчить какие-то данные, то просто наш запрос присваивается какой-то текстовой переменной и затем парсится как Вам удобном, как я показывал Вам или с помощью регулярных выражений, как я не показывал Вам
Хочу заметить, что в настоящее время очень найти товар, который соответствует качество-цена. Одним из таких товаров является ben sherman сумки, которые отличаются небольшой ценой, а самое главное очень хорошим качеством. Кроме этого Вы сможете приобрести данные сумки через Интернет-магазин, тем самым сэкономив свое драгоценное время. |
Автор статьи - Andrey53
Похожие записи
Метки: idAntifreeze, Idhttp, post-запрос, отправка post-запроса на сервер
К записи “Отправка Post-запроса на сервер средствами Delphi. Часть 1” оставлено комментариев: 23.
Привет.
Долго мучаюсь незнаю как сделать по твоему методу полу-авторегистрацию на этом сайте _http://www.dot.tk/ru/pageA00.html
Если можешь дай свою аську.
45107328четыре
посмари здесь
_
А как быть с POST запросами на русском языке?? насколько я знаю у INDY с этим проблемы.
у меня выдает ошибку
[Error] Unit1.pas(63): There is no overloaded version of ‘Post’ that can be called with these arguments
[Fatal Error] Project1.dpr(5): Could not compile used unit ‘Unit1.pas’
какая версия Delphi?
версия DELPHI 6
Ну тут как минимум могу Вам посоветовать сменить версию Delphi на 7, так как исходники от Delphi 7 рабочие
спасиба щас попробую
Спасиба за совет!
В 7-й версии пост запрос отправляет, тока после отправки выбивает програму из режима компиляции.
а как кукис отправить?
используйте TidCookieManager
А как через куки расскажите попродробнее, пожалуйста.
Я хочу авторизоваться через куки на файлообменники hotfile, тока не получается, не пойму как это, расскажите, пожалуйста.
сейчас нету к сожалению времени, что-то писать объяснять, но для начала обычным сниффером посмотрите что отправляется на сервер, затем попробуйте просто поставить TIdCoockieManager на форму (печенюшку)
можно ли через данный метод работать с чекбоксами(или комбобоксами)?
а почему нет, конечно Combobox.Text же есть, вот и получается значение из него
при ошибке (404), программа вылетает…. как этого избежать??
try
except
on e.Excepton do
Showmessage(e.Error);
end;
Вылови ошибку, которая появляется при 404 и делай условие, избегай этой ошибки
Подскажите, как дела у Indy с AJAX? на странице висит комбобокс, при выборе нужного пункта — запускается java скрипт onchange=javascript:setTimeout(‘__doPostBack(‘8′,»)’,0). Как это реализовать в indy?
Нашел в инете что скрипты умеет TWebBrowser, но он, как я понял, не умеет ntlm авторизаию (а у меня имено такая).
на сколько я знаю Indy скрипты не выполняет, поэтому Вам надо копать в сторону именно TWebBrowser