//在數據頭設置 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;
}