WinInet, подтверждение редиректа.
От: Dima2  
Дата: 26.12.03 10:39
Оценка:
Всем привет.

Есть такая проблема.

Ф-я HttpSendRequest возвращает ошибку ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION.
Как подтвердить этот редирект, или что надо сделать. Искал ничего не нашел, даже в гугле по этой ошибке практически ничего нет.
Дело в том, что эта ошибка выдается только для определенного запроса, остальные запросы с редиректом проходят нормально, т.е. WinInet сам нормально делает дополнительный запрос и уходит на редирект.
А вот что такое посылает сервер, что требуется подтвердить этот редирект не знаю, а главное как подтвердить ???
Re: WinInet, подтверждение редиректа.
От: Аноним  
Дата: 26.12.03 13:09
Оценка:
D>А вот что такое посылает сервер, что требуется подтвердить этот редирект не знаю, а главное как подтвердить ???

Если на тот же самый адрес пойти в IE — спросит чего-нибудь или нет?

Юрий
Re[2]: WinInet, подтверждение редиректа.
От: Dima2  
Дата: 26.12.03 13:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если на тот же самый адрес пойти в IE — спросит чего-нибудь или нет?


Нет ничего не спрашивает, гуляет без проблем.
Re[3]: WinInet, подтверждение редиректа.
От: andik  
Дата: 26.12.03 16:40
Оценка: 4 (1)
Здравствуйте, Dima2, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>Если на тот же самый адрес пойти в IE — спросит чего-нибудь или нет?


D>Нет ничего не спрашивает, гуляет без проблем.


может сервер запрашивает какие-нибудь специфические хедеры
например, куки. Типа их не находит и отбрасывает тебя.

посотри, например в Network Monitor(в win 2000 идет в дистрибутиве), как ие общается с сервером.
Что приходит, что отдает и сравнивай со своим
... << RSDN@Home 1.0 beta 7a >>
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...
Пока на собственное сообщение не было ответов, его можно удалить.