C++ 实现HTTPS CDN

#include 
#include 
#include 
#include 
#include "Windows.h"
#include "wininet.h"
using namespace std;
//链接需要 wininet.lib
#pragma comment(lib,"wininet.lib")
int main(int argc, char* argv[]) {

	HINTERNET hInternet = InternetOpen(NULL,//初始化应用程序对 WinINet 函数的使用。
		INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnect = InternetConnect(hInternet,//打开给定站点的文件传输协议 (FTP) 或 HTTP 会话。
        TEXT("cdn域名或ip"), INTERNET_DEFAULT_HTTPS_PORT,
        NULL, NULL,
        INTERNET_SERVICE_HTTP,
        0, 0);
    DWORD dwOpenRequestFlags =
        //设置启用HTTPS
        INTERNET_FLAG_SECURE |
        //禁止根据请求中给定的主机名检查从服务器返回的基于 SSL/PCT 的证书。WinINet 函数通过比较匹配的主机名和简单的通配符规则,对证书进行简单的检查。
        INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
    HINTERNET hRequest = HttpOpenRequest(hConnect, TEXT("GET"), TEXT("/"), NULL,
        NULL, NULL,
        dwOpenRequestFlags, 0);
   // HttpAddRequestHeaders(hRequest, TEXT("Host: xxxx.com\r\n"), -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
    if (!HttpSendRequest(hRequest, TEXT("Host: xxxx.com\r\n"), 0, NULL, 0)) {
        cout << "HttpSendRequest Error";
        DWORD send_error = GetLastError();
        cout << "-Error Code:" << hex << send_error << endl;
    }
    //HTTP_QUERY_RAW_HEADERS_CRLF 接收服务器返回的所有标头。每个标题都以“\0”结尾。附加的“\0”终止标题列表。
    BYTE* headers_crlf = (BYTE*)malloc(2048);
    DWORD buff_length = 2048;
    ZeroMemory(headers_crlf,2048);
    if (HttpQueryInfoA(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, headers_crlf, &buff_length, 0)) {
        //检索与 HTTP 请求关联的标头信息。
        printf("%s\r\n", headers_crlf);
    }
    DWORD read_size=0;
    if (!InternetQueryDataAvailable(hRequest, &read_size, 0, 0)) {//获得内容大小
        cout << "InternetQueryDataAvailable Error";
        DWORD send_error = GetLastError();
        cout << "-Error Code:" << hex << send_error << endl;
    }
    BYTE* read = (BYTE*)malloc(read_size);
    ZeroMemory(read, read_size);
    DWORD dwBytesRead;
    if (!InternetReadFile(hRequest, read, read_size, &dwBytesRead)) {
        cout << "InternetReadFile Error";
        DWORD send_error = GetLastError();
        cout << "-Error Code:" << hex << send_error << endl;
    }
    else {
        printf("%s", read);
    }

    return 1;
}

你可能感兴趣的:(c++,安全,信息安全,反病毒)