Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо