GET-запрос winHTTP C++

Я сразу к делу.

  • Так выглядит запрос браузера

    ПОЛУЧИТЬ /index.html HTTP/1.1

  • Вот что делает winHTTP

    ПОЛУЧИТЬ http://site.com/index.html HTTP/1.1

Могу ли я получить запрос winHTTP в том же формате, что и обычный? Я использую VC++ 2008, если это имеет значение.


person Ilia Choly    schedule 25.03.2010    source источник
comment
Я не знаю ответа, но мне любопытно, почему вы хотите этого?   -  person SteelBytes    schedule 25.03.2010
comment
Так как вы должны отправить Host: site.com в отдельной строке и отправить только путь в GET? На самом деле после прочтения RFC говорится, что сайт, указанный в GET URI Host:, следует игнорировать.   -  person jpyllman    schedule 25.03.2010
comment
atm мой код ac/p из msdn msdn.microsoft .com/en-us/library/aa384270%28VS.85%29.aspx Я уже пытался установить URL-адрес /index.html, а затем вручную установить заголовок Host:, но это не сработало.   -  person Ilia Choly    schedule 25.03.2010
comment
Возможно, на компьютере настроен непрозрачный прокси (локальный, например Fiddler, или корпоративный) — в этом случае запрос будет иметь полный uri   -  person Jonathan    schedule 11.07.2018


Ответы (1)


Ваш код должен выглядеть так:

// Specify an HTTP server.
if (hSession)
    hConnect = WinHttpConnect( hSession, L"www.example.com",
                               INTERNET_DEFAULT_HTTP_PORT, 0);

// Create an HTTP request handle.
if (hConnect)
    hRequest = WinHttpOpenRequest( hConnect, L"GET", L"/path/resource.html",
                                   NULL, WINHTTP_NO_REFERER, 
                                   WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                   WINHTTP_FLAG_SECURE);

// Send a request.
if (hRequest)
    bResults = WinHttpSendRequest( hRequest,
                                   WINHTTP_NO_ADDITIONAL_HEADERS,
                                   0, WINHTTP_NO_REQUEST_DATA, 0, 
                                   0, 0);

Можете ли вы опубликовать эти три вызова из своего кода?

Обратите внимание, что полный URL-адрес разделен на две части: имя хоста указывается в вызове WinHttpConnect, а относительный путь к ресурсу указывается в вызове WinHttpOpenRequest (как параметр pwszObjectName). Судя по вашему комментарию, вы указываете полный URL-адрес в вызове WinHttpConnect.

person Franci Penov    schedule 29.03.2010