Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.12;
Скачать: CL | DM;

Вниз

WinInet GET и POST запросы   Найти похожие ветки 

 
HF-Trade ©   (2010-09-16 21:33) [0]

Пытаюсь получить страничку из инета, выдернуть ссылку на капчу, и отправить 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);


 
Медвежонок Пятачок ©   (2010-09-17 09:26) [1]

весь этот код можно заменить несколькими строками, которые используют xmlhttprequest


 
Palladin ©   (2010-09-17 09:38) [2]

весь этот код можно заменить несколькими строками, которые используют IdHTTP


 
Медвежонок Пятачок ©   (2010-09-17 11:32) [3]

с идшттп строк будет больше ибо может быть прокси


 
HF-Trade ©   (2010-09-17 18:34) [4]

Про xmlhttpprequest не слышал) Почитаю...
IdHTTP, намного проще, но толи я кривой, толи хз, но в потоках начинает "тупить", на таймауты, вообще не реагирует, на многих форумах пишут не использовать idHttp в потоках.

прокси будет.

По сабжу, разобрался, - несовсем правильно заполнял zxData...

Чтобы не создавать еще одну тему -
Что за прокси такие Planetlab/CoDeeN ?
При запросе капчи из под этих прокси(уже после того как получаю страничку и парсю ее на ссылку для капчи), получаю сообщение(сейчас под рукой нет текста, чтобы скопировать), о Header, - просит, что то добавить в заголовок... Не пойму, че ему надо от меня=) ?



Страницы: 1 вся ветка

Текущий архив: 2010.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
3-1248979662
Sysdba
2009-07-30 22:47
2010.12.12
Проблема начинающего с Interbase/Firebird


15-1283618602
Programmist
2010-09-04 20:43
2010.12.12
Поздравляем москвичей


4-1241873558
pushkin42
2009-05-09 16:52
2010.12.12
Получить список файлов драйвера для устройства


15-1283257709
bss
2010-08-31 16:28
2010.12.12
Создание интерфейса без сохранения в переменную


15-1283286924
NailMan
2010-09-01 00:35
2010.12.12
Продолжаю радовать себя китайским товарами