c++ curl使用ip4_C++ 使用 curl 进行 http 请求(GET、POST、Download)的封装

#include "CommonTools.h"using namespace std;size_t CommonTools::receive_data(void *contents, size_t size, size_t nmemb,void *stream){

string *str= (string*)stream; (*str).append((char*)contents, size*nmemb); return size * nmemb;}

size_t CommonTools::writedata2file(void *ptr, size_t size, size_t nmemb,FILE *stream) {

size_t written= fwrite(ptr, size, nmemb, stream); return written;}

int CommonTools::download_file(const char* url, const char outfilename[FILENAME_MAX]){

CURL *curl; FILE *fp; CURLcode res;/* 调用curl_global_init()初始化libcurl */

res= curl_global_init(CURL_GLOBAL_ALL); if (CURLE_OK !=res)

{

printf("init libcurl failed."); curl_global_cleanup(); return -1;}

/* 调用curl_easy_init()函数得到 easy interface型指针 */

curl= curl_easy_init();if (curl) {

fp= fopen(outfilename,"wb");/* 调用curl_easy_setopt()设置传输选项 */

res= curl_easy_setopt(curl, CURLOPT_URL, url); if (res !=CURLE_OK)

{

fclose(fp); curl_easy_cleanup(curl); return -1;}

/* 根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务 */

res= curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CommonTools::writedata2file); if (res !=CURLE_OK){

fclose(fp); curl_easy_cleanup(curl); return -1;}

/* 根据curl_easy_setopt()设置的传输选项,实现回调函数以完成用户特定任务 */

res= curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); if (res !=CURLE_OK)

{

fclose(fp); curl_easy_cleanup(curl); return -1;}

res= curl_easy_perform(curl);// 调用curl_easy_perform()函数完成传输任务

fclose(fp);/* Check for errors */

if(res !=CURLE_OK){

fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res)); curl_easy_cleanup(curl); return -1;}

/* always cleanup */

curl_easy_cleanup(curl);// 调用curl_easy_cleanup()释放内存

}

curl_global_cleanup(); return 0;}

CURLcode CommonTools::HttpGet(const std::string & strUrl, std::string & strResponse,int nTimeout){

CURLcode res; CURL* pCURL = curl_easy_init();if (pCURL==NULL) {

return CURLE_FAILED_INIT;}

curl_easy_setopt(pCURL, CURLOPT_URL, strUrl.c_str()); //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt(pCURL, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt(pCURL, CURLOPT_TIMEOUT, nTimeout); curl_easy_setopt(pCURL, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(pCURL, CURLOPT_WRITEFUNCTION, CommonTools::receive_data); curl_easy_setopt(pCURL, CURLOPT_WRITEDATA, (void*)&strResponse); res = curl_easy_perform(pCURL); curl_easy_cleanup(pCURL); return res;}

CURLcode CommonTools::HttpPost(const std::string & strUrl, std::string szJson,std::string & strResponse,int nTimeout){

CURLcode res; char szJsonData[1024]; memset(szJsonData, 0, sizeof(szJsonData)); strcpy(szJsonData, szJson.c_str()); CURL* pCURL = curl_easy_init(); struct curl_slist* headers = NULL; if (pCURL ==NULL) {

return CURLE_FAILED_INIT;}

CURLcode ret; ret = curl_easy_setopt(pCURL, CURLOPT_URL, strUrl.c_str());// std::cout << ret << std::endl;ret= curl_easy_setopt(pCURL, CURLOPT_POST, 1L); headers = curl_slist_append(headers,"content-type:application/json");ret= curl_easy_setopt(pCURL, CURLOPT_HTTPHEADER, headers);ret= curl_easy_setopt(pCURL, CURLOPT_POSTFIELDS, szJsonData); //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); ret = curl_easy_setopt(pCURL, CURLOPT_TIMEOUT, nTimeout);ret= curl_easy_setopt(pCURL, CURLOPT_WRITEFUNCTION, CommonTools::receive_data);ret= curl_easy_setopt(pCURL, CURLOPT_WRITEDATA, (void*)&strResponse);res= curl_easy_perform(pCURL); curl_easy_cleanup(pCURL); return res;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值