win inet Ошибка парсинга https «Вы говорите по обычному протоколу HTTP с портом сервера с поддержкой SSL». - PullRequest
1 голос
/ 21 июня 2020

Я просматриваю какой-то https-сайт. Это мой код.

hh.OpenHttp AddressOf InternetStatusCallback, "MY WEBSITE", "GET", 443, "/search/searchResult"
...
Private ctx As LongPtr
...
'OpenHttp Function
openRequestHandle = HttpOpenRequest(connectHandle, mMethod, mUrl, vbNullString, vbNullString, vbNullString, INTERNET_FLAG_RELOAD Or INTERNET_FLAG_NO_CACHE_WRITE, VarPtr(ctx))

И я получил это.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <a href="MY WEBSITE"><b>MY WEBSITE</b></a></blockquote></p>
</body></html>

Веб-сайт не мой, поэтому я не могу его редактировать. Я могу только отредактировать свой код.

Есть идеи?

1 Ответ

0 голосов
/ 23 июня 2020

Вам необходимо указать флаг безопасного соединения, когда вы вызываете это:

void HttpOpenRequestA(
  HINTERNET hConnect,
  LPCSTR    lpszVerb,
  LPCSTR    lpszObjectName,
  LPCSTR    lpszVersion,
  LPCSTR    lpszReferrer,
  LPCSTR    *lplpszAcceptTypes,
  DWORD     dwFlags,
  DWORD_PTR dwContext
);

В MS:

https://docs.microsoft.com/en-us/windows/win32/api/wininet/nf-wininet-httpopenrequesta

INTERNET_FLAG_SECURE Использует безопасную семантику транзакции. Это означает использование Secure Sockets Layer / Private Communications Technology (SSL / PCT) и имеет смысл только в HTTP-запросах.

И в стеке:

Как отправлять HTTPS запрос с использованием Win Inet?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...