Re[4]: WinInet, подтверждение редиректа.
От: Dima2  
Дата: 28.12.03 18:31
Оценка:
Здравствуйте, andik, Вы писали:

A>посотри, например в Network Monitor



Спасибо за подсказку, причина конечно не куках, хотя куки надо посылать обязательно, потому что иначе Web приложение показывает страничку, что куки не в порядке. Вот оно мне и пыталось все время показать эту страничку, а я не мог редиректнуться на нее
Кстати, всегда ли надо посылать куки, если они есть для данного URL'a ?

Теперь по самой проблеме.
Вот при таком ответе сервера, Wininet делает редирект сам

HTTP/1.1 100 Continue
Server: Microsoft-IIS......
Date: ....

HTTP/1.1 302 Moved Temporarily
Server: Microsoft-IIS......
Date: ....
Connection: close
Content-type: .....
Location: http://xxxx.com/.....



А при таком:

HTTP/1.1 302 Moved Temporarily
Server: Microsoft-IIS/4.0
Date: Sat, 27 Dec 2003 22:17:03 GMT
Content-Type: text/html
Set-Cookie: ....
Set-Cookie: ....
Set-Cookie: ....
Set-Cookie: ....
Set-Cookie: ....
Location: http://xxxx.com/.....


вываливается с ошибкой ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION.

Как решить эту проблему?
Я при посылке запроса установил флаг INTERNET_FLAG_NO_AUTO_REDIRECT, и теперь в обоих случаях ошибки ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION не вываливается, зато редирект надо делать руками.
Вот такая очередная подляна от MS, конечно же нигде не описанная.


P.S.
По ходу наткнулся еще на одну подляну. Засвечу здесь InternetGetCookie, чтобы поиском можно было найти.

НЕ ВЕРЬТЕ этому примеру из MSDN
LPSTR lpszData = NULL;    // buffer to hold the cookie data
DWORD dwSize=0;           // variable to get the buffer size needed
// The first call to InternetGetCookie will get the required 
// buffer size needed to download the cookie data.
if (!InternetGetCookie(szURL, NULL, lpszData, &dwSize))
{
// Check for an insufficient buffer error.
    if (GetLastError()== ERROR_INSUFFICIENT_BUFFER)
    {
        // Allocate the necessary buffer.
        lpszData = new char[dwSize];
.......


Здесь вроде бы применяется стандартный подход, первый раз вызываеш — узнаеш необходимый размер буфера, второй раз — получаеш данные.
Так вот, ф-я InternetGetCookie все время возвращает TRUE , а я все никак не мог понять почему у меня куки пустые, то-ли не сохраняются, то-ли еще что.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.