Igor-84 Ответов: 2

Winhttpsendrequest и HTTPS в windows XP


Операционная система: Windows XP SP3. Приложение должно загрузить картинку с сайта через протокол https протокол. В результате WinHttpSendRequest возвращает ошибку -2146893018. Вот фрагмент кода:

Что я уже пробовал:

hRequest = WinHttpOpenRequest(hConnect, L"GET", Path, Protocol, 0, 0, WINHTTP_FLAG_SECURE);

    if(hRequest){
        bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0,
                                      WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
    ...
    }

Эта проблема существует только на WinXP. На Windows 7 - все работает нормально.

Но если попытаться загрузить другое изображение с другого сайта через http протокол (замена WINHTTP_FLAG_SECURE на 0), то все работает нормально. - Что случилось?

Richard MacCutchan

Код ошибки на самом деле 80090326: см. ошибка 80090326 - поиск Google[^] возможные причины.

Igor-84

Описывается следующим образом: "полученное сообщение было неожиданным или плохо отформатированным". Что я должен исправить в своем коде?

Richard MacCutchan

Вам нужно посмотреть на данные, передаваемые между вашим клиентом и сервером. Никто здесь не может догадаться, что с ним не так.

KarstenK

Я настоятельно рекомендую не использовать вышедшую на пенсию Windows XP в интернете. У него есть критические проблемы, и вы можете оказаться заражены некоторыми вредоносными программами, такими как зашифрованный диск.

Igor-84

И как это сделать?
P. S. картинка загрузки изображений из Google

Richard MacCutchan

Используйте свой отладчик или добавьте некоторый код регистрации. Отладка приложений-это неотъемлемая часть работы разработчика. Это навык, над которым нужно работать.

Igor-84

Использование новейших версий Windows не является решением в моем случае. Я использую Windows 7, и этот код хорошо работает здесь. И мне тоже нужно работать с этим кодом на Windows XP.

Igor-84

Хммм... Все, что говорит отладчик, это то, что WinHttpOpenRequest() работает нормально, а WinHttpSendRequest() возвращает GetLastError = -2146893018. Может быть, WinHTTP имеет некоторые ограничения на Windows XP? Но я не нашел никакой информации об этом в интернете.

Richard MacCutchan

Итак, вам нужно проверить содержимое сообщения, отправляемого в вашем WinHttpSendRequest, так как именно это вызывает ошибку. Вполне возможно, что вы используете версии кода или библиотеки, которые не совместимы с Windows XP.

Rick York

Мистер Маккатчен дал важный совет, который вы, возможно, не поняли. Почти вся документация Microsoft имеет дело с кодами ошибок в шестнадцатеричном формате, поэтому вы должны сделать то же самое для облегчения ссылок. Я всегда использую строку формата "%08X" при отображении кодов ошибок windows, и я рекомендую вам сделать то же самое.

Igor-84

Я не знаю, где я могу проверить содержание сообщения. В Windows XP я настроил Visual Studio 2008, создал новый проект и скомпилировал код загрузчика. А при отладке WinHttpSendRequest() возвращает тот же результат: "полученное сообщение было неожиданным или плохо отформатированным".

Richard MacCutchan

На самом деле нет никакого смысла размещать точно такие же детали в каждом сообщении. Вы уже знаете, что такое код ошибки и что он означает. Поэтому используйте свой отладчик для проверки значений, которые вы пытаетесь отправить на сервер. Как я уже говорил, никто здесь не может догадаться, что происходит.

2 Ответов

Рейтинг:
2

Gerry Schmitz

"Проблема" заключается в том, что вы "ожидаете", что и XP, и Windows 7 будут "действовать одинаково".

Тот факт, что Windows 7 все еще получает обновления, а не XP, вероятно, означает, что есть "различия".

Тот факт, что вы нашли метод, который работает, но все еще удивляетесь, "почему" другой метод не работает, не должен быть проблемой в этот момент.


Рейтинг:
0

Igor-84

Похоже я нашел объяснение почему Winhttpsendrequest завершается() вернул ошибку -2146893018 или 2148074278 на Windows XP с пакетом обновления 3.
Проблема заключается в том, что версия протокола шифрования TLS, который использует система WinXP, является TLS 1.0.
Некоторые веб-сайты, работающие на https, не поддерживают TLS версии 1.0. весьма вероятно, что такие веб-сайты отклоняют соединение, если клиент пытается связаться с ними.
Таким образом, Windows 7 использует протокол TLS версии 1.1 и 1.2. Поэтому такие сайты правильно работают с клиентами.