WinInet, HttpSendRequest работает со второй попытки
От: Аноним  
Дата: 20.01.11 16:17
Оценка:
Приветствую!

Программа отсылает запрос на сервер через прокси с ntlm авторизацией. Проблема заключается в том, что первый вызов HttpSendRequest возвращает FALSE, а GetLastError() возвращает 12029 ERROR_INTERNET_CANNOT_CONNECT. Если ту же функцию вызвать повторно — всё в порядке. Т.е. я изменил программу вот так:

    if (!HttpSendRequestA(hHTTPRequest, headerfield, (DWORD) strlen(headerfield), postdata, (DWORD) strlen(postdata))) {
        printf("Error 1: %d\n", GetLastError());
        if (!HttpSendRequestA(hHTTPRequest, headerfield, (DWORD) strlen(headerfield), postdata, (DWORD) strlen(postdata))) {        
           printf("Error 2: %d\n", GetLastError());
        }
    }


И всё работает! Конечно, можно так оставить, но хочется понимать почему именно так..
Единственное, что приходит в голову — при первом вызове авторизуется на прокси, а второй уже проходит нормально..
Пробовал задавать опции INTERNET_OPTION_CONNECT_RETRIES, INTERNET_OPTION_CONNECT_TIMEOUT — не помогло.
Re: WinInet, HttpSendRequest работает со второй попытки
От: vf  
Дата: 21.01.11 13:07
Оценка:
Здравствуйте, Аноним, Вы писали:

Я не в теме по HttpSendRequest, но ИМХО название функции вполне соответствует ее поведению — типично авторизация требует не меньше двух запросов. Причем в случае с НТЛМ, хорошо что у системы есть вся информация для второго запроса, а например для Диджест для второго запроса нужен логин/пароль — так что тут логично.
Ед-но что смущает так это неинформативная ошибка, не понятно как с такой ошибкой понять нужен второй запрос или все пропало?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.