根据文件使用c++写两个方法,第一个方法用来发送请求并获取返回结果(参数规范为url,handler,filepath,iTimeout(可不填)),第二个方法用来获取返回结果中的fileUrl
时间: 2025-01-01 07:35:04 浏览: 5
好的,以下是用C++编写的两个方法:
### 方法一:发送请求并获取返回结果
```cpp
#include <iostream>
#include <string>
#include <curl/curl.h>
// 回调函数,用于处理接收到的数据
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
size_t totalSize = size * nmemb;
userp->append((char*)contents, totalSize);
return totalSize;
}
std::string SendRequest(const std::string& url, const std::string& handler, const std::string& filepath, int iTimeout = -1) {
CURL* curl;
CURLcode res;
std::string readBuffer;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
// 设置URL
std::string fullUrl = url + handler;
curl_easy_setopt(curl, CURLOPT_URL, fullUrl.c_str());
// 设置HTTP头
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "apiKey: ZEKO3zuUubQf9m6OVFGyDE8NSyMzVglY");
headers = curl_slist_append(headers, "Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 设置POST数据
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ("file=@" + filepath).c_str());
// 设置回调函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
// 设置超时时间
if (iTimeout != -1) {
curl_easy_setopt(curl, CURLOPT_TIMEOUT, iTimeout);
}
// 执行请求
res = curl_easy_perform(curl);
// 清理
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
}
curl_global_cleanup();
return readBuffer;
}
```
### 方法二:获取返回结果中的fileUrl
```cpp
#include <nlohmann/json.hpp>
using json = nlohmann::json;
std::string GetFileUrlFromResponse(const std::string& response) {
try {
json j = json::parse(response);
if (!j.is_null() && j.contains("atts") && !j["atts"].is_null()) {
for (const auto& att : j["atts"]) {
if (att.contains("fileUrl")) {
return att["fileUrl"].get<std::string>();
}
}
}
} catch (const std::exception& e) {
std::cerr << "Error parsing JSON: " << e.what() << std::endl;
}
return "";
}
int main() {
std::string url = "https://gateway.kinglai.com.cn/env-101/por-1901/oa/rest/seeyon/rest/attachment?";
std::string handler = "token=9f274a16-b030-4c61-a75d-c5c0f40fe385";
std::string filepath = "/D:/桌面/新建 文本文档 (4).txt";
std::string response = SendRequest(url, handler, filepath);
std::string fileUrl = GetFileUrlFromResponse(response);
if (!fileUrl.empty()) {
std::cout << "File URL: " << fileUrl << std::endl;
} else {
std::cout << "Failed to retrieve file URL." << std::endl;
}
return 0;
}
```
### 说明
1. **SendRequest** 方法使用 `libcurl` 库发送 HTTP POST 请求,并将响应存储在字符串中。
2. **GetFileUrlFromResponse** 方法解析 JSON 响应,提取 `fileUrl` 字段。
3. **main** 函数演示了如何调用这两个方法并输出结果。
请确保在编译和运行这些代码之前安装了 `libcurl` 和 `nlohmann/json` 库。你可以通过以下命令安装这些依赖项(假设你使用的是 Ubuntu):
```sh
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libnlohmann-json3-dev
```
或者如果你使用 CMake,可以在 `CMakeLists.txt` 中添加相应的依赖项:
```cmake
find_package(cURL REQUIRED)
find_package(nlohmann_json REQUIRED)
target_link_libraries(your_target_name cURL::libcurl nlohmann_json::nlohmann_json)
```
阅读全文