![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WinInet GET и POST запросы [D7, XP]
HF-Trade © (2010-09-16 21:33:00)Пытаюсь получить страничку из инета, выдернуть ссылку на капчу, и отправить Post.
Страничку я получаю, достаю ссылку на капчу, отправляют Post(мб не верно отправляю, или не верно формирую данные для Post запроса).
Хотя в ответ должен получить страничку, с информацией о неверно введенной капче(заведомо ввожу неверно ее).
Посмотрите плс, что не так делаю...
Код -
const
BufferSize = 1024;
Var
hInet, hSession, hRequest: HINTERNET;
Code: String;
Size, Index:Cardinal;
F: File;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
Buf, AHTML: String;
szData: AnsiString;
Captcha : AnsiString;
AHeader: String;
Cap: String;
begin
//Заголовок (то что выдал снифер, за исключением gzip в Accept-Encoding).
AHeader :=
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1' +#13#10 +
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8' +#13#10+
'Content-Type: application/x-www-form-urlencoded' + #13#10 +
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1' + #13#10+
'Accept-Encoding: deflate' +#13#10+
'Cookie2: $Version=1' + #13#10+
'Connection: Keep-Alive, TE' +#13#10+
'TE: deflate, gzip, chunked, identity, trailers';
hInet := InternetOpen('Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.6.30 Version/10.62', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
hSession := InternetConnect(hInet, 'xxx.ru', INTERNET_DEFAULT_HTTP_PORT, nil, 'HTTP/1.0', INTERNET_SERVICE_HTTP, 0, 0);
hRequest := HttpOpenRequest(hSession, 'GET', '/yyy/111/', nil, ' http://xxx.ru', nil, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_RELOAD, 0);
//Получаю страничку
IF HttpSendRequest(hRequest, PChar(Aheader), Length(AHeader), nil, 0) Then
Begin
AssignFile(F, 'C:\test.html');
Rewrite(F, 1);
repeat
InternetReadFile(hRequest, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(F, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(F);
end;
//Парсю страничку на ссылку для капчи
...
//Получаю капчу
hRequest := HttpOpenRequest(hSession, 'GET', PChar(Captcha), nil, ' http://xxx.ru', nil, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_RELOAD, 0);
IF HttpSendRequest(hRequest, PChar(AHeader), Length(AHeader), nil, 0) Then
Begin
AssignFile(F, 'C:\test.jpg');
Rewrite(F, 1);
repeat
InternetReadFile(hRequest, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(F, Buffer, BufferLen)
until
BufferLen = 0;
CloseFile(F);
end;
//Вытаскиваю данные для составления запроса POST в szData из ранее полученной странички -
szData := szData + 'xxx=' + Buf + #13#10;
Cap := InputBox('Капча', 'Введите символы с картинки:', '');
szData := szData + 'cap=' + Cap + #13#10;
szData := szData + 'yyy=' + Buf + #13#10;
...
// POST
hRequest := HttpOpenRequest(hSession, 'POST', '/yyy/111/', nil, ' http://xxx.ru', nil, INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_RELOAD, 0);
IF HttpSendRequest(hRequest, PChar(AHeader), Length(AHeader), PChar(szData), Length(szData)) Then
Begin
//Получаю страничку с ответом
AssignFile(F, 'C:\testPost.html');
Rewrite(F, 1);
repeat
InternetReadFile(hRequest, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(F, Buffer, BufferLen)
until
BufferLen = 0;
CloseFile(F);
end;
InternetCloseHandle(hRequest);
InternetCloseHandle(hSession);
InternetCloseHandle(hInet);
HF-Trade (2010-09-17 18:34:00) [1]Про xmlhttpprequest не слышал) Почитаю...
IdHTTP, намного проще, но толи я кривой, толи хз, но в потоках начинает "тупить", на таймауты, вообще не реагирует, на многих форумах пишут не использовать idHttp в потоках.
прокси будет.
По сабжу, разобрался, - несовсем правильно заполнял zxData...
Чтобы не создавать еще одну тему -
Что за прокси такие Planetlab/CoDeeN ?
При запросе капчи из под этих прокси(уже после того как получаю страничку и парсю ее на ссылку для капчи), получаю сообщение(сейчас под рукой нет текста, чтобы скопировать), о Header, - просит, что то добавить в заголовок... Не пойму, че ему надо от меня=) ?
Медвежонок Пятачок (2010-09-17 11:32:00) [2]с идшттп строк будет больше ибо может быть прокси
Palladin (2010-09-17 09:38:00) [3]весь этот код можно заменить несколькими строками, которые используют IdHTTP
Медвежонок Пятачок (2010-09-17 09:26:00) [4]весь этот код можно заменить несколькими строками, которые используют xmlhttprequest