首页 > 编程语言 >C++使用curl库 以字节流方式 发送 https同步请求

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

时间:2023-02-28 16:31:49浏览次数:31  
标签:slist https C++ header easy curl CURLOPT setopt


 //在数据头设置  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;
}

 

标签:slist,https,C++,header,easy,curl,CURLOPT,setopt
From: https://blog.51cto.com/u_12389088/6091497

相关文章

  • 详解http和https
    前言大家好,我是小卷!近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促......
  • C/C++场地租借系统[2023-02-28]
    C/C++场地租借系统[2023-02-28]C/C++开发一个简单的场地租借系统,实现以下基本功能:【基本功能】1.库存信息文件。每块场地信息包含场地编号、场地名称、是否借出等。2......
  • C++ | 友元
    类的主要特点之一就是数据的封装,即类的私有成员无法在类的外部(作用域之外)进行访问。但是,有时需要在类的外部访问类的私有成员,怎么办?C++提供了另外一种形式的访问权限:友元。......
  • java调用c++的几种方式
    jni类似c#调用c++的方式,定义java端的c++代码接口。packagecrayon.jni;publicclassJNITest{publicnativestaticvoidset(inti);publicna......
  • 如何在IIS中启用HTTPS
    在上篇文章中,介绍了如何安装typecho博客系统,默认是没有启用https访问的,这篇文章介绍如何在IIS中开启https访问。 开启https访问需要两个步骤:1、申请一个ssl证书,我这......
  • KingbaseES libstdc++.so.6 version 'CXXABI_1.3.8'问题处理
    概述initdb报错如下:“ERROR:libstdc++.so.6:version:'CXXABI_1.3.8'notfound(requiredby...)”此文是以CentOSLinux7(AltArch)操作系统为例,编译安装高版本GC......
  • 代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)
    977、有序数组的平方题目链接:977、有序数组的平方题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。例......
  • C++ condition_variable
    一、使用场景在主线程中创建一个子线程去计数,计数累计100次后认为成功,并告诉主线程;主线程收到计数100次完成的信息后继续往下执行二、条件变量的成员函数wait:当前线......
  • C++ 文件知识
    #include"iostream"#include"filesystem"#include"fstream"intcount=0;std::stringMessage="";//读取文件内容,C风格intReadFile(char*FileName,char*......
  • C++调试环境的建立(仅适合初学者,高手莫入)
    近日,发现光用C#还是不行,毕竟许多老代码都是C++等其他语言写的,所以决定学C++。作为初学者,连编译环境等都不了解,问了一些高手,他们推荐N多编译器,我晕了(云里来雾里去的,一点不过......