美文网首页
curl 库的使用

curl 库的使用

作者: wjundong | 来源:发表于2020-02-27 23:22 被阅读0次

一个简单的调用 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;
}

运行结果

image.png

进行简单的封装

#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;
}

相关文章

  • Android中将curl转http

    前置:由于Android本身不支持curl,若要在Android中使用curl,必须引入curl库: 将curl库...

  • 2018-04-04-PHP cURL 访问微信 https 接

    作为 PHP 开发者,需要发起网络请求,都是使用 cURL 扩展库。 PHP cURL 扩展,使用 curl_in...

  • CURL库使用

    前面想说的话:这两天在公司一直在负责对接中国电信物联网开放平台接口的编写,所以一直在用CURL库,所以重新封装了轮...

  • curl 库的使用

    一个简单的调用 Face++ 人脸识别 API 示例 运行结果 进行简单的封装

  • Debian Linux下增加php对curl扩展的支持

    使用php -m查看php当前已开启扩展库 原本在安装php时没有设置curl扩展库,最近项目需要curl扩展库的...

  • php无法开启curl库解决办法

    php版本5.6无论使用网上的什么方法都无法开启curl库。php解决高版本无法开启curl库问题 经过测试,放到...

  • 安装yasm (汇编编译器)和 nasm

    一 、关于curl 命令 curl 是一款实用的URL命令行网络通讯工具/库,使用curl 命令可以执行常用的ht...

  • CURL

    PHP使用CURL详解 CURL是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使...

  • PHP使用CURL详解

    PHP使用CURL详解 Curl是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使...

  • curl多线程crash分析

    问题描述 在需要并发请求http时,需要通过多线程使用curl库。curl的handle对象只要保证在一个线程中创...

网友评论

      本文标题:curl 库的使用

      本文链接:https://www.haomeiwen.com/subject/dyjbqhtx.html