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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章