c++ 使用http上传文件
时间: 2023-09-13 11:13:17 浏览: 198
要在C++中使用HTTP上传文件,你可以使用WinINet库提供的功能。首先,你需要包含头文件wininet.h,并在项目属性中添加附加依赖项。然后,你可以使用WinINet库中的函数来实现文件上传。
以下是一个简单的示例代码,演示了如何使用WinINet库上传文件:
```cpp
#include <windows.h>
#include <wininet.h>
int main() {
HINTERNET hInternet, hConnect;
const char* server = "example.com";
const char* username = "username";
const char* password = "password";
const char* localFilePath = "C:\\path\\to\\file.txt";
const char* remoteFilePath = "/path/to/remote/file.txt";
// 初始化WinINet库
hInternet = InternetOpenA("Uploader", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL) {
// 处理初始化失败的情况
return 1;
}
// 连接到服务器
hConnect = InternetOpenUrlA(hInternet, server, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect == NULL) {
// 处理连接失败的情况
InternetCloseHandle(hInternet);
return 1;
}
// 设置用户名和密码
InternetSetOptionA(hConnect, INTERNET_OPTION_USERNAME, (LPVOID)username, strlen(username));
InternetSetOptionA(hConnect, INTERNET_OPTION_PASSWORD, (LPVOID)password, strlen(password));
// 打开本地文件
HANDLE hFile = CreateFileA(localFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
// 处理打开文件失败的情况
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return 1;
}
// 获取文件大小
DWORD fileSize = GetFileSize(hFile, NULL);
// 创建HTTP请求
HINTERNET hRequest = HttpOpenRequestA(hConnect, "PUT", remoteFilePath, NULL, NULL, NULL, 0, 0);
if (hRequest == NULL) {
// 处理创建请求失败的情况
CloseHandle(hFile);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return 1;
}
// 发送HTTP请求头
char fileSizeStr\[32\];
sprintf(fileSizeStr, "%lu", fileSize);
HttpAddRequestHeadersA(hRequest, "Content-Length", fileSizeStr, strlen(fileSizeStr));
// 发送HTTP请求体
char buffer\[4096\];
DWORD bytesRead;
DWORD bytesWritten;
while (ReadFile(hFile, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) {
if (!InternetWriteFile(hRequest, buffer, bytesRead, &bytesWritten) || bytesRead != bytesWritten) {
// 处理发送请求体失败的情况
CloseHandle(hFile);
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return 1;
}
}
// 关闭文件和HTTP请求
CloseHandle(hFile);
InternetCloseHandle(hRequest);
// 关闭连接和WinINet库
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return 0;
}
```
请注意,这只是一个简单的示例代码,你需要根据你的实际需求进行适当的修改和错误处理。你还需要替换示例代码中的服务器地址、用户名、密码、本地文件路径和远程文件路径为你自己的信息。
希望这可以帮助到你!
#### 引用[.reference_title]
- *1* [c++使用libcurl上传文件](https://blog.csdn.net/qianbo042311/article/details/125235602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [C++ 实现FTP上传文件](https://blog.csdn.net/sjdjjd6466446/article/details/107564485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文