一个简单的调用 Face++ 人脸识别 API 示例
#include <iostream>
#include <string>
#include <curl/curl.h>
#include <sstream>
using namespace std;
size_t writeData(char *ptr, size_t size, size_t nmemb, void *content)
{
string data(ptr, size * nmemb);
*((stringstream*) content) << data << endl;
return size * nmemb;
}
int main(void)
{
// 初始化
CURL *curl = curl_easy_init();
// 设置 URL
curl_easy_setopt(curl, CURLOPT_URL, "https://api-cn.faceplusplus.com/facepp/v3/detect");
// 添加配置表单
curl_mime *multipart = curl_mime_init(curl);
curl_mimepart *part = curl_mime_addpart(multipart);
curl_mime_name(part, "api_key");
curl_mime_data(part, "tDgu41ZgpJkD9FZCZMiXdeyF2qqZEnY7", CURL_ZERO_TERMINATED);
part = curl_mime_addpart(multipart);
curl_mime_name(part, "api_secret");
curl_mime_data(part, "wgRRh1aNW40nVzkllj8qtz22BgKHLeKf", CURL_ZERO_TERMINATED);
part = curl_mime_addpart(multipart);
curl_mime_name(part, "image_file");
curl_mime_filedata(part, "face.jpg");
curl_easy_setopt(curl, CURLOPT_MIMEPOST, multipart);
//添加回调函数
stringstream response;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
// 执行 post 请求
CURLcode rescode = curl_easy_perform(curl);
if (CURLE_OK != rescode)
fprintf(stderr, "\n\n-------post error-------\n %s \n\n", curl_easy_strerror(rescode));
// 打印请求结果
cout << response.str() << endl;
curl_mime_free(multipart);
curl_easy_cleanup(curl);
return 0;
}
运行结果

进行简单的封装
#include <sstream>
#include <curl/curl.h>
#include <string>
class Curl
{
private:
const char *url;
CURL *curl;
curl_mime *multipart;
static size_t writeData(char *ptr, size_t size, size_t nmemb, void *curl);
public:
Curl(const char *url);
void addPartData(const char *name, const char *data, size_t size = -1);
void addPartFile(const char *name, const char *filename);
std::string post();
~Curl();
};
using namespace std;
size_t Curl::writeData(char *ptr, size_t size, size_t nmemb, void *content)
{
string data(ptr, size * nmemb);
*((stringstream*) content) << data << endl;
return size * nmemb;
}
string Curl::post()
{
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_MIMEPOST, multipart);
stringstream response;
// Set call back
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, this->writeData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode rescode = curl_easy_perform(curl);
if (CURLE_OK != rescode)
fprintf(stderr, "\n\n-------post error-------\n %s \n\n", curl_easy_strerror(rescode));
return response.str();
}
Curl::Curl(const char *url)
{
this->url = url;
curl = curl_easy_init();
multipart = curl_mime_init(curl);
}
void Curl::addPartData(const char *name, const char *data, size_t size)
{
curl_mimepart *part = part = curl_mime_addpart(multipart);
curl_mime_name(part, name);
curl_mime_data(part, data, size);
}
void Curl::addPartFile(const char *name, const char *filename)
{
curl_mimepart *part = part = curl_mime_addpart(multipart);
curl_mime_name(part, name);
curl_mime_filedata(part, filename);
}
Curl::~Curl()
{
curl_mime_free(multipart);
curl_easy_cleanup(curl);
}
// -------- main -------
#include <iostream>
int main()
{
const char * key = "tDgu41ZgpJkD9FZCZMiXdeyF2qqZEnY7";
const char * secret = "wgRRh1aNW40nVzkllj8qtz22BgKHLeKf";
Curl curl = "https://api-cn.faceplusplus.com/facepp/v3/detect";
curl.addPartData("api_key", key);
curl.addPartData("api_secret", secret);
curl.addPartFile("image_file", "face.jpg");
cout << curl.post() << endl;
return 0;
}
网友评论