wininet https请求——不使用openssl也是可以的

 

//WinINet HTTPS Get

// https请求:https://github.com/netdata/netdata/blob/master/CMakeLists.txt

#include<iostream>
#include<Windows.h>
#include<WinInet.h>
#pragma comment(lib,"WinInet.lib")
int main()
{
	HINTERNET hOpen = InternetOpen(TEXT("KaikiUpdate"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);//打开连接,获得Internet句柄
	if (!hOpen)
		std::cout << "Error InternetOpen.\n";

	HINTERNET hConnect = InternetConnect(hOpen, TEXT("github.com"), INTERNET_DEFAULT_HTTPS_PORT,
		TEXT(""), TEXT(""), INTERNET_SERVICE_HTTP, 0, 0);//连接,获得连接句柄	
	if (!hConnect) {
		std::cout << "Error InternetConnect.\n";
		return -1;
	}
		

	HINTERNET hReq = HttpOpenRequest(hConnect, TEXT("GET"), TEXT("netdata/netdata/blob/master/CMakeLists.txt"),
		HTTP_VERSION, TEXT(""), NULL, INTERNET_FLAG_SECURE, 0);//打开请求,获得请求句柄	
	if (!hReq) {
		std::cout << "Error HttpOpenRequest.\n";
		return -1;
	}
		
	BOOL status = HttpSendRequest(hReq, NULL, 0, NULL, 0);//发送

	if (status == FALSE) {
		std::cout << "Error HttpSendRequest.\n";//断网时在这里出错
		return -1;
	}

	char szBuffer[1024] = "";
	DWORD dwByteRead = 0;
	// FILE* fp = NULL;
	// fopen_s(&fp, "dl.txt", "wb");

	do
	{
		status = InternetReadFile(hReq, szBuffer, ARRAYSIZE(szBuffer), &dwByteRead);
		if (status == FALSE)std::cout << "Error InternetReadFile.\n";
		else std::cout << szBuffer;
		std::cout << szBuffer;
		// fwrite(szBuffer, dwByteRead, 1, fp);
		ZeroMemory(szBuffer, dwByteRead);
	} while (dwByteRead);
	
	//fclose(fp);

	InternetCloseHandle(hReq);
	InternetCloseHandle(hConnect);
	InternetCloseHandle(hOpen);
	return 0;
}

 使用火绒剑和wireshark的抓包分析:

 

posted @ 2022-12-27 15:54  bonelee  阅读(172)  评论(0编辑  收藏  举报