中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C++ WinHttp如何處理響應頭

c++
小樊
89
2024-08-29 16:49:38
欄目: 編程語言

在 C++ 中,使用 WinHTTP 庫處理 HTTP 響應頭的方法如下:

  1. 首先,確保已經包含了必要的頭文件并鏈接到了 winhttp.lib 庫。
#include<iostream>
#include<windows.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")
  1. 使用 WinHttpOpen()WinHttpConnect()WinHttpOpenRequest() 函數初始化 HTTP 請求。

  2. 使用 WinHttpSendRequest() 函數發送 HTTP 請求。

  3. 使用 WinHttpReceiveResponse() 函數接收 HTTP 響應。

  4. 使用 WinHttpQueryHeaders() 函數查詢和處理響應頭。

以下是一個完整的示例代碼:

#include<iostream>
#include<windows.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")

int main() {
    // 初始化 HTTP 會話
    HINTERNET hSession = WinHttpOpen(L"MyUserAgent", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
    if (!hSession) {
        std::cerr << "Error opening HTTP session."<< std::endl;
        return -1;
    }

    // 連接到服務器
    HINTERNET hConnect = WinHttpConnect(hSession, L"example.com", INTERNET_DEFAULT_HTTPS_PORT, 0);
    if (!hConnect) {
        std::cerr << "Error connecting to server."<< std::endl;
        WinHttpCloseHandle(hSession);
        return -1;
    }

    // 打開 HTTP 請求
    HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"GET", L"/path", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE);
    if (!hRequest) {
        std::cerr << "Error opening request."<< std::endl;
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hSession);
        return -1;
    }

    // 發送 HTTP 請求
    BOOL bResult = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
    if (!bResult) {
        std::cerr << "Error sending request."<< std::endl;
        WinHttpCloseHandle(hRequest);
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hSession);
        return -1;
    }

    // 接收 HTTP 響應
    bResult = WinHttpReceiveResponse(hRequest, NULL);
    if (!bResult) {
        std::cerr << "Error receiving response."<< std::endl;
        WinHttpCloseHandle(hRequest);
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hSession);
        return -1;
    }

    // 查詢和處理響應頭
    DWORD dwSize = 0;
    WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, NULL, &dwSize, WINHTTP_NO_HEADER_INDEX);
    std::wstring headers(dwSize / sizeof(wchar_t), L'\0');
    bResult = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF, WINHTTP_HEADER_NAME_BY_INDEX, &headers[0], &dwSize, WINHTTP_NO_HEADER_INDEX);
    if (!bResult) {
        std::cerr << "Error querying headers."<< std::endl;
        WinHttpCloseHandle(hRequest);
        WinHttpCloseHandle(hConnect);
        WinHttpCloseHandle(hSession);
        return -1;
    }

    std::wcout << L"Response headers:"<< std::endl<< headers<< std::endl;

    // 關閉句柄
    WinHttpCloseHandle(hRequest);
    WinHttpCloseHandle(hConnect);
    WinHttpCloseHandle(hSession);

    return 0;
}

這個示例代碼將連接到 example.com 服務器,發送一個 GET 請求,然后輸出響應頭。注意,你需要根據實際情況修改服務器地址和請求路徑。

0
理塘县| 峡江县| 黄浦区| 新和县| 谷城县| 克什克腾旗| 郎溪县| 莱阳市| 景德镇市| 利辛县| 东丽区| 顺平县| 平武县| 黄平县| 静安区| 巧家县| 来安县| 册亨县| 田东县| 皮山县| 普陀区| 应城市| 聂拉木县| 阜城县| 英山县| 营山县| 革吉县| 台北市| 柳河县| 葫芦岛市| 德安县| 溧阳市| 兴和县| 乌拉特后旗| 龙海市| 灵石县| 安顺市| 常宁市| 曲阳县| 莒南县| 普陀区|