Train_RFID_Linux/ai_matrix/Http/Http.cpp

151 lines
5.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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";
}
}