winapi 发起网络请求
时间: 2023-09-19 07:11:39 浏览: 41
要在 WinAPI 中发起网络请求,可以使用 WinINet 库提供的函数。下面是一个简单的示例代码,用于发起一个 GET 请求并获取响应:
```c++
#include <windows.h>
#include <wininet.h>
#include <string>
#pragma comment(lib, "wininet.lib")
int main()
{
HINTERNET hInternet = InternetOpen(nullptr, INTERNET_OPEN_TYPE_DIRECT, nullptr, nullptr, 0);
if (!hInternet) {
return -1;
}
HINTERNET hConnect = InternetConnect(hInternet, "www.example.com", INTERNET_DEFAULT_HTTP_PORT, nullptr, nullptr, INTERNET_SERVICE_HTTP, 0, 0);
if (!hConnect) {
InternetCloseHandle(hInternet);
return -1;
}
HINTERNET hRequest = HttpOpenRequest(hConnect, "GET", "/", nullptr, nullptr, nullptr, 0, 0);
if (!hRequest) {
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return -1;
}
if (!HttpSendRequest(hRequest, nullptr, 0, nullptr, 0)) {
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return -1;
}
std::string response;
DWORD bytesRead = 0;
char buffer[1024];
while (InternetReadFile(hRequest, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0) {
response.append(buffer, bytesRead);
}
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
// 处理响应数据
// ...
return 0;
}
```
这段代码使用 WinINet 库中的函数发起一个 GET 请求,并将响应数据保存在一个字符串中。你可以将该代码复制到 Visual Studio 中,并根据需要进行修改。注意,此示例代码中使用了 C++ 的 std::string 类型来保存响应数据,如果你要在 C 语言中使用,需要使用 char 数组来保存响应数据。