C++使用curl库 以字节流方式 发送 https同步请求

 //在数据头设置  Content-Type application/octet-stream 否则可能会默认因为有字符 & 造成无法正确传输;

    // 设置消息头
    curl_slist *header = NULL;
    header = curl_slist_append(header, "Content-Type:application/octet-stream" );

最后记得

curl_slist_free_all(header);

以下是使用流程

 //回调函数
void write_func(char *ptr,size_t size,size_t nmemb,void *userdata)        
{
    std::string& buffer = *(std::string*)userdata;
    size_t len = size*nmemb;
    for(size_t i = 0;i<len;++i)
    {
        buffer += *ptr;
        ++ptr;
    }

}
// https 请求
int  https_post_test(const char* strUrl,uint8_t * szPost,int dataSize,const char * pCaPath)
{
    int ret = -1;
    CURL * curl=NULL;
    CURLcode res;
    std::string res_buf = "";

    // 设置消息头
    curl_slist *header = NULL;
    header = curl_slist_append( m_header, "Content-Type:application/octet-stream" );

    curl = curl_easy_init();  //初始化
    if(curl&&strUrl)
    {
        curl_easy_setopt(curl,CURLOPT_URL,strUrl);             //设置url地址
		curl_easy_setopt( curl, CURLOPT_HTTPHEADER, header ); // Header
        curl_easy_setopt( curl, CURLOPT_REFERER, "nginx" );
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
        if(szPost)
        {
            
            curl_easy_setopt(curl,CURLOPT_POSTFIELDS, szPost);		// POST 的数据内容
            curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, dataSize);	// POST的数据长度 
        }
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_func);  //设置回调函数
        curl_easy_setopt(curl,CURLOPT_WRITEDATA,&res_buf);        //设置写数据
        char error[1024];
        curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
        //接收数据时超时设置,如果2秒内数据未接收完,直接退出
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 2);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);

         if(NULL == pCaPath)
         {
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);//设定为不验证证书和HOST
             curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
         }
         else
         {
             curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
             curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
         }

        res = curl_easy_perform(curl);                           //执行
      
        if(res == CURLE_OK)
        {
         
        } else
        {
            LOGE(TAG,"curl error %d",res);
            ret = -1;
        }
        curl_easy_cleanup(curl);
		curl_slist_free_all(header);
    } else
    {
        ret =-1;
    }
    return ret;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值