GetLastError возвращает 6 после вызова WinHttpSendRequest - PullRequest
0 голосов
/ 27 февраля 2020

Долго ищу по net. Но бесполезно. Пожалуйста, помогите или попробуйте дать некоторые идеи, как этого добиться.

Заранее спасибо.

У меня есть следующий код:

void QtGuiApplication::getBtnClick() {
    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL,
        hConnect = NULL,
        hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen(L"WinHTTP Example/1.0",
        WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
        WINHTTP_NO_PROXY_NAME,
        WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession) {

        hConnect = WinHttpConnect(hSession, L"127.0.0.1",
            INTERNET_DEFAULT_HTTP_PORT, 0);
    }
    else {
        qDebug("Error has WinHttpOpen");
        QString errorStr = QString::number(GetLastError());
        qDebug(qPrintable(errorStr));
    }



    // Create an HTTP request handle.
    if (hConnect) {
        hRequest = WinHttpOpenRequest(hConnect, L"GET", NULL,
            NULL, WINHTTP_NO_REFERER,
            WINHTTP_DEFAULT_ACCEPT_TYPES,
            WINHTTP_FLAG_SECURE);
    }
    else {
        qDebug("Error has WinHttpConnect");
        QString errorStr = QString::number(GetLastError());
        qDebug(qPrintable(errorStr));
    }


    // Send a request.
    if (hRequest) {
        bResults = WinHttpSendRequest(hRequest,
            WINHTTP_NO_ADDITIONAL_HEADERS,
            0, WINHTTP_NO_REQUEST_DATA, 0,
            0, 0);
    }
    else {
        qDebug("Error has WinHttpOpenRequest");
        QString errorStr = QString::number(GetLastError());
        qDebug(qPrintable(errorStr));
    }


    // End the request.
    if (bResults) {
        bResults = WinHttpReceiveResponse(hRequest, NULL);
    }
    else {
        qDebug("Error has WinHttpSendRequest");
        QString errorStr = QString::number(GetLastError());
        qDebug(qPrintable(errorStr));
    }


    // Keep checking for data until there is nothing left.
    if (bResults)
        do
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable(hRequest, &dwSize))
                printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize + 1];
            if (!pszOutBuffer)
            {
                printf("Out of memory\n");
                dwSize = 0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize + 1);

                if (!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer,
                    dwSize, &dwDownloaded))
                    printf("Error %u in WinHttpReadData.\n", GetLastError());
                else
                    qDebug(pszOutBuffer);

                // Free the memory allocated to the buffer.
                delete[] pszOutBuffer;
            }

        } while (dwSize > 0);


        // Report any errors.
        if (!bResults) {
            qDebug("Error has occurred");
            QString str = QString::number(GetLastError());
            qDebug(qPrintable(str));
        }


        // Close any open handles.
        if (hRequest) WinHttpCloseHandle(hRequest);
        if (hConnect) WinHttpCloseHandle(hConnect);
        if (hSession) WinHttpCloseHandle(hSession);
}

Я пытаюсь получить доступ к местному сервер через winhttp. Браузер обычно может получить доступ к 127.0.0.1.

bResults = WinHttpSendRequest(hRequest,
            WINHTTP_NO_ADDITIONAL_HEADERS,
            0, WINHTTP_NO_REQUEST_DATA, 0,
            0, 0);

ошибка var GetLastError возвращает 6 после вызова WinHttpSendRequest

Код службы, работающей со Springboot, выглядит следующим образом

@Controller
public class MyController {
    @ResponseBody
    @RequestMapping("")
    public String home() {
        return "Home";
    }
}

Информация о запуске Springboot: Tomcat запущен на портах: 80 (http) с контекстным путем ''

Использование Winhttp API для доступа к сервисам, Получение информации об ошибках Springboot

Я перепробовал множество способов, и это все еще бесполезно.

Например, измените порт Springboot и порт запроса Winhttp API на 8089.

1 Ответ

0 голосов
/ 27 февраля 2020

С WinHttpConnect

INTERNET_DEFAULT_HTTP_PORT

Использует порт по умолчанию для HTTP-серверов (порт 80).

INTERNET_DEFAULT_HTTPS_PORT

Использует порт по умолчанию для серверов HTTPS (порт 443). При выборе этого порта sh автоматически не устанавливается безопасное соединение. Вы все равно должны указать использование семантики безопасных транзакций, используя флаг WINHTTP_FLAG_SECURE с WinHttpOpenRequest.

Часть :80 является портом TCP. Вы можете рассматривать эти порты как конечные точки связи на определенном IP-адресе (в случае localhost - 127.0.0.1). IANA отвечает за поддержание официальных назначений стандартных номеров портов для определенных c услуг. Порт 80 оказывается стандартным портом для HTTP.

См .: В чем весь смысл "localhost", хостов и портов вообще?

Итак, вы нужно изменить INTERNET_DEFAULT_HTTPS_PORT на INTERNET_DEFAULT_HTTP_PORT.

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