使用 Winhttp.dll 下载一张图片
时间: 2024-04-10 15:30:55 浏览: 136
你可以使用 Winhttp.dll 来下载图片。下面是一个使用 Winhttp.dll 下载图片的示例代码:
```cpp
#include <Windows.h>
#include <Winhttp.h>
#include <iostream>
#include <fstream>
#pragma comment(lib, "Winhttp.lib")
int main()
{
// 创建 WinHTTP 会话
HINTERNET hSession = WinHttpOpen(L"WinHTTP Example/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession)
{
// 打开连接
HINTERNET hConnect = WinHttpOpenRequest(hSession, L"GET", L"http://example.com/image.jpg", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (hConnect)
{
// 发送请求
if (WinHttpSendRequest(hConnect, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0))
{
// 接收响应
if (WinHttpReceiveResponse(hConnect, NULL))
{
// 创建文件并写入数据
std::ofstream file("image.jpg", std::ofstream::binary);
if (file)
{
BYTE buffer[4096];
DWORD bytesRead;
while (WinHttpReadData(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
{
file.write(reinterpret_cast<const char*>(buffer), bytesRead);
}
file.close();
std::cout << "图片下载成功!" << std::endl;
}
else
{
std::cerr << "无法创建文件!" << std::endl;
}
}
else
{
std::cerr << "无法接收响应!" << std::endl;
}
}
else
{
std::cerr << "无法发送请求!" << std::endl;
}
// 关闭连接
WinHttpCloseHandle(hConnect);
}
else
{
std::cerr << "无法打开连接!" << std::endl;
}
// 关闭会话
WinHttpCloseHandle(hSession);
}
else
{
std::cerr << "无法创建会话!" << std::endl;
}
return 0;
}
```
在上面的示例代码中,将 `http://example.com/image.jpg` 替换为你想要下载的图片的 URL。此代码将创建一个名为 "image.jpg" 的文件,并将下载的图片数据写入其中。你可以根据需要修改保存文件的路径和文件名。
请注意,此示例仅适用于 Windows 平台,并且需要链接 Winhttp.lib 库。如果你使用的是其他平台或开发环境,请相应地进行修改。
阅读全文