学网站建设要多长时间,健身所网站建设策划书,渭南市住建设局网站,网站建设 九艾一。由于工作的原因#xff0c;需要对curl做一些封装#xff0c;附加上我们的证书#xff0c;提供给第三个C和jAVA使用。
二。头文件封闭四个函数#xff0c;get#xff0c;post#xff0c;download#xff0c;upload
#ifndef CURLHTTP_H
#define CURLHTTP_H#include …一。由于工作的原因需要对curl做一些封装附加上我们的证书提供给第三个C和jAVA使用。
二。头文件封闭四个函数getpostdownloadupload
#ifndef CURLHTTP_H
#define CURLHTTP_H#include iostream
#include string
#include curl/curl.hclass CurlHttp {
public:
CurlHttp();
~CurlHttp();CURLcode get(const std::string url, std::string response);
CURLcode post(const std::string url, const std::string data, std::string response);
CURLcode download(const std::string url, const std::string savePath);
CURLcode upload(const std::string url, const std::string filePath, std::string response);
private:
CURL* curl;static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response);
void setSSLSettings();
};#endif // CURLHTTP_H三。实现Cpp返回一个CURLcode方便出错时追踪错误
#include CurlHttp.hCurlHttp::CurlHttp() {curl curl_easy_init();if (!curl) {std::cerr Failed to initialize cURL std::endl;}
}CurlHttp::~CurlHttp() {if (curl) {curl_easy_cleanup(curl);}
}CURLcode CurlHttp::get(const std::string url, std::string response) {CURLcode res CURLE_FAILED_INIT;if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);setSSLSettings();res curl_easy_perform(curl);if (res ! CURLE_OK) {std::cerr cURL GET request failed: curl_easy_strerror(res) std::endl;}}return res;
}CURLcode CurlHttp::post(const std::string url, const std::string data, std::string response) {CURLcode res CURLE_FAILED_INIT;if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);setSSLSettings();// 设置请求头为JSON类型struct curl_slist* headers nullptr;headers curl_slist_append(headers, Content-Type: application/json);curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);res curl_easy_perform(curl);if (res ! CURLE_OK) {std::cerr cURL POST request failed: curl_easy_strerror(res) std::endl;}}return res;
}CURLcode CurlHttp::download(const std::string url, const std::string savePath) {CURLcode res CURLE_FAILED_INIT;if (curl) {FILE* file fopen(savePath.c_str(), wb);if (file) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);curl_easy_setopt(curl, CURLOPT_WRITEDATA, file);setSSLSettings();res curl_easy_perform(curl);if (res ! CURLE_OK) {std::cerr cURL download failed: curl_easy_strerror(res) std::endl;}fclose(file);} else {std::cerr Failed to open file for writing: savePath std::endl;res CURLE_FAILED_INIT;}}return res;
}CURLcode CurlHttp::upload(const std::string url, const std::string filePath, std::string response) {CURLcode res CURLE_FAILED_INIT;if (curl) {FILE* file fopen(filePath.c_str(), rb);if (file) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);curl_easy_setopt(curl, CURLOPT_READDATA, file);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);setSSLSettings();res curl_easy_perform(curl);if (res ! CURLE_OK) {std::cerr cURL upload failed: curl_easy_strerror(res) std::endl;}fclose(file);} else {std::cerr Failed to open file for reading: filePath std::endl;res CURLE_FAILED_INIT;}}return res;
}size_t CurlHttp::WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response) {size_t total_size size * nmemb;//response-append((char*)contents, total_size);response-append(static_castchar*(contents), totalSize);return total_size;
}void CurlHttp::setSSLSettings() {// 设置证书路径curl_easy_setopt(curl, CURLOPT_CAINFO, /path/to/certificate.pem);// 设置私钥路径curl_easy_setopt(curl, CURLOPT_SSLKEY, /path/to/private.key);// 设置私钥密码如果有的话curl_easy_setopt(curl, CURLOPT_KEYPASSWD, password);
}四。测试函数
#include iostream
#include CurlHttp.hint main() {CurlHttp curlHttp;// 发起 GET 请求std::string url https://api.example.com/data;std::string response;CURLcode res curlHttp.get(url, response);if (res CURLE_OK) {std::cout GET request successful. Response: response std::endl;} else {std::cerr GET request failed. Error: curl_easy_strerror(res) std::endl;}// 发起 POST 请求url https://api.example.com/post;std::string data key1value1key2value2;response.clear();res curlHttp.post(url, data, response);if (res CURLE_OK) {std::cout POST request successful. Response: response std::endl;} else {std::cerr POST request failed. Error: curl_easy_strerror(res) std::endl;}// 下载文件url https://example.com/file.jpg;std::string savePath /path/to/save/file.jpg;res curlHttp.download(url, savePath);if (res CURLE_OK) {std::cout File downloaded successfully and saved at: savePath std::endl;} else {std::cerr File download failed. Error: curl_easy_strerror(res) std::endl;}// 上传文件url https://api.example.com/upload;std::string filePath /path/to/upload/file.txt;response.clear();res curlHttp.upload(url, filePath, response);if (res CURLE_OK) {std::cout File uploaded successfully. Response: response std::endl;} else {std::cerr File upload failed. Error: curl_easy_strerror(res) std::endl;}return 0;
}六。创建一个aidl文件
package com.example.yourpackage; // 替换为您的包名interface ICurlHttpService {int get(in String url, out String response);int post(in String url, in String data, out String response);int download(in String url, in String savePath);int upload(in String url, in String filePath, out String response);
}