151 lines
5.8 KiB
C++
151 lines
5.8 KiB
C++
//
|
||
// Created by matrixai on 2/10/23.
|
||
//
|
||
|
||
#include "Http.h"
|
||
|
||
namespace ai_matrix
|
||
{
|
||
HttpUtil::HttpUtil() {
|
||
pCurl_ = curl_easy_init();
|
||
}
|
||
|
||
HttpUtil::~HttpUtil() {
|
||
curl_easy_cleanup(pCurl_);
|
||
curl_global_cleanup();
|
||
}
|
||
|
||
size_t HttpUtil::callBack(void *pBuffer, size_t size, size_t nmemb, std::string &strResp)
|
||
{
|
||
size_t sizes = size * nmemb;
|
||
std::string strTemp((char*)pBuffer, sizes);
|
||
strResp += strTemp;
|
||
return sizes;
|
||
}
|
||
|
||
/**
|
||
* Post请求,使用Json传递请求参数
|
||
* @param requestUrl 请求地址
|
||
* @param json 请求参数
|
||
* @return 返回Json
|
||
*/
|
||
std::string HttpUtil::postRequestByJson(std::string strRequestUrl, Json::Value &json) {
|
||
if (this->pCurl_ == nullptr)
|
||
{
|
||
pCurl_ = curl_easy_init();
|
||
if (nullptr == pCurl_)
|
||
{
|
||
LogError << "curl_easy_init failed !";
|
||
return "curl init failed";
|
||
}
|
||
}
|
||
|
||
// 设置请求类型 [POST,GET]
|
||
curl_easy_setopt(pCurl_, CURLOPT_CUSTOMREQUEST, "POST");
|
||
// 设置请求地址
|
||
curl_easy_setopt(pCurl_, CURLOPT_URL, strRequestUrl.c_str());
|
||
// 设置请求超时时间(秒)
|
||
curl_easy_setopt(pCurl_, CURLOPT_CONNECTTIMEOUT, 10);
|
||
// 设置允许重定向(1-true,0-false)
|
||
curl_easy_setopt(pCurl_, CURLOPT_FOLLOWLOCATION, 1);
|
||
// URL不带协议的时候,使用的默认协议。
|
||
curl_easy_setopt(pCurl_, CURLOPT_DEFAULT_PROTOCOL, "https");
|
||
// 创建请求头
|
||
struct curl_slist *pHeaderList = nullptr;
|
||
pHeaderList = curl_slist_append(pHeaderList, (std::string("blade-auth: ") + this->token_).c_str());
|
||
pHeaderList = curl_slist_append(pHeaderList, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
|
||
pHeaderList = curl_slist_append(pHeaderList, "Accept:application/json");
|
||
pHeaderList = curl_slist_append(pHeaderList, "Content-Type:application/json");
|
||
pHeaderList = curl_slist_append(pHeaderList, "charset:utf-8");
|
||
curl_easy_setopt(pCurl_, CURLOPT_HTTPHEADER, pHeaderList);
|
||
// 设置请求内容
|
||
Json::StreamWriterBuilder jswBuilder;
|
||
std::string requestJson = Json::writeString(jswBuilder, json);
|
||
curl_easy_setopt(pCurl_, CURLOPT_POSTFIELDS, requestJson.c_str());
|
||
// 设置回调函数(在回调函数里整理返回的数据)
|
||
curl_easy_setopt(pCurl_, CURLOPT_WRITEFUNCTION, callBack);
|
||
// 设置回调的接收变量
|
||
std::string strResponse;
|
||
curl_easy_setopt(pCurl_, CURLOPT_WRITEDATA, &strResponse);
|
||
|
||
// 执行请求
|
||
CURLcode res = curl_easy_perform(pCurl_);
|
||
// 清除 headerlist
|
||
curl_slist_free_all(pHeaderList);
|
||
// 重置curl
|
||
curl_easy_reset(pCurl_);
|
||
|
||
if (res != CURLE_OK)
|
||
{
|
||
// LogError << " 请求失败,失败信息:" << curl_easy_strerror(res);
|
||
return curl_easy_strerror(res);
|
||
}
|
||
return strResponse;
|
||
}
|
||
|
||
/**
|
||
* post请求获取Token
|
||
* @param user
|
||
* @param password
|
||
* @param tenantId
|
||
* @return
|
||
*/
|
||
std::string HttpUtil::postRequestGetToken(std::string strRequestUrl, std::string strUsername, std::string strPassword, std::string strTenantId, std::string strAuthorization) {
|
||
if (this->pCurl_ == nullptr)
|
||
{
|
||
pCurl_ = curl_easy_init();
|
||
if (nullptr == pCurl_)
|
||
{
|
||
LogError << "curl_easy_init failed !";
|
||
return "curl init failed";
|
||
}
|
||
}
|
||
|
||
// 设置请求类型 [POST,GET]
|
||
curl_easy_setopt(pCurl_, CURLOPT_CUSTOMREQUEST, "POST");
|
||
// 设置请求地址
|
||
curl_easy_setopt(pCurl_, CURLOPT_URL, strRequestUrl.c_str());
|
||
// 设置请求超时时间(秒)
|
||
curl_easy_setopt(pCurl_, CURLOPT_CONNECTTIMEOUT, 10);
|
||
// 设置允许重定向(1-true,0-false)
|
||
curl_easy_setopt(pCurl_, CURLOPT_FOLLOWLOCATION, 1);
|
||
// URL不带协议的时候,使用的默认协议。
|
||
curl_easy_setopt(pCurl_, CURLOPT_DEFAULT_PROTOCOL, "https");
|
||
// 设置请求头
|
||
struct curl_slist *pHeaderList = NULL;
|
||
pHeaderList = curl_slist_append(pHeaderList, "Authorization: <Authorization>");
|
||
pHeaderList = curl_slist_append(pHeaderList, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36");
|
||
curl_easy_setopt(pCurl_, CURLOPT_HTTPHEADER, pHeaderList);
|
||
// 设置请求参数
|
||
curl_mime *mime;
|
||
curl_mimepart *part;
|
||
mime = curl_mime_init(pCurl_);
|
||
part = curl_mime_addpart(mime);
|
||
curl_mime_name(part, "username");
|
||
curl_mime_data(part, strUsername.c_str(), CURL_ZERO_TERMINATED);
|
||
part = curl_mime_addpart(mime);
|
||
curl_mime_name(part, "password");
|
||
curl_mime_data(part, strPassword.c_str(), CURL_ZERO_TERMINATED);
|
||
part = curl_mime_addpart(mime);
|
||
curl_mime_name(part, "tenantId");
|
||
curl_mime_data(part, strTenantId.c_str(), CURL_ZERO_TERMINATED);
|
||
part = curl_mime_addpart(mime);
|
||
curl_mime_name(part, "grant_type");
|
||
curl_mime_data(part, "password", CURL_ZERO_TERMINATED);
|
||
curl_easy_setopt(pCurl_, CURLOPT_MIMEPOST, mime);
|
||
|
||
// 执行请求
|
||
CURLcode res = curl_easy_perform(pCurl_);
|
||
// 清除 headerlist
|
||
curl_slist_free_all(pHeaderList);
|
||
// 重置curl
|
||
curl_easy_reset(pCurl_);
|
||
|
||
if (res != CURLE_OK)
|
||
{
|
||
// LogError << " 请求失败,失败信息:" << curl_easy_strerror(res);
|
||
return curl_easy_strerror(res);
|
||
}
|
||
return "strResponse";
|
||
}
|
||
} |