libcurl 基本使用

编译使用

https://my.oschina.net/u/1420791/blog/198247

当前例子调用libcurl发送Post请求,但是在其中调用UrlEncode函数对发送的Post数据进行了编码,因为指定了application/x-www-form-urlencoded编码格式,说明libcurl并没有提供一个方法进行urlencode编码,这个需要注意

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)

{

ofstream ofs;

ofs.open("reponse.html");

string str = (char*)buffer;

ofs << str << endl;

return 0;

}

int TestCurlPost()

{

CURL* curl;

CURLcode res;

FILE *fptr;

struct curl_slist *http_header = NULL;

if ((fptr = fopen(FILENAME, "w")) == NULL) {

fprintf(stderr, "fopen file error: %s\n", FILENAME);

return -1;

}

Json::Value jsonLoginContext;

jsonLoginContext["loginAccount"] = "admin";

Json::Value jsonParamContext;

jsonParamContext["a"] = 1;

jsonParamContext["b"] = 2;

jsonParamContext["c"] = 3;

Json::Value jsonParm;

jsonParm.append(jsonParamContext);

std::string strPostData= "authorJson=";

strPostData += jsonLoginContext.toStyledString();

strPostData += "&parmJson=";

strPostData += jsonParamContext.toStyledString();

Json::Value json;

json["authorJson"] = "username";

Json::FastWriter writer;

std::string strResult = UrlEncode(strPostData);

char szSendBuffer[1024] = { 0 };

strcpy(szSendBuffer, strResult.c_str());

curl = curl_easy_init();

if (curl)

{

curl_easy_setopt(curl, CURLOPT_URL, "http://120.177.55.115:8089/cs/restfull/operationRestfullApi/testPost");

curl_easy_setopt(curl, CURLOPT_POST, 1);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szSendBuffer);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fptr);

curl_slist *plist1 = curl_slist_append(NULL,

"Content-Type: application/x-www-form-urlencoded; charset=UTF-8");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, plist1);

res = curl_easy_perform(curl);

if (res != CURLE_OK)

{

return -1;

}

}

return 0;

}

时间: 2024-12-20 17:31:29

libcurl 基本使用的相关文章

libcurl发起post请求时间延迟问题。except为空即可

最近在做团购酒店APP分享到qzone功能,使用libcurl访问qzone的分享cgi接口,酒店分享信息以POST方式传输,在测试的时候发现分享接口平均有2s的延迟,这延迟也太大了吧,于是乎问了空间的接口人,答曰:怎么可能,这个接口的平均调用时延是100-200ms,肯定是你的代码有问题.好吧,开始检查代码,使用strace -p跟踪系统调用,发现curl发送了两次请求,其中第一次请求的响应特别的慢,额,原来这个才是导致延迟的罪魁祸首,tcpdump之后发现curl发送的第一个请求包含一个Ex

libcurl库进行http通讯-开篇

从今天开始介绍一些常用的库. 首先就来写一写关于libcurl库. libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)., libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展),

libcurl编译

下载: git://github.com/bagder/curl.git openssl: openssl编译 for linux or mingw:./buildconf./configure --with-ssl="$PREFIX"make for android:./buildconf../configure  --prefix=$PREFIX \    CC=${CROSS_PREFIX}gcc \    --disable-shared \    --enable-stati

实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能.本文我将主要讲解如何使用libcurl库去实现相关功能.(转载请指明出于breaksoftware的csdn博客) libcurl在http://curl.haxx.se/libcurl/有详细的介绍,有兴趣的朋友可以去读下.本文我只是从实际使用的角度讲解其中的一些功能. libcurl中主要有两个接口类型:CURL和CURLM.CURL又称easy interface,它接口简单.使用方便,但是它是一个同步接口,我们不能使用它

Libcurl上传图片

最近使用C++做一些编程,JAVA中采用HTTP协议通信很简单,我们熟知的HTTPClient就可以完成通信.在C++中BOOST库仅仅将TCP/UDP协议进行了很好的封装,但是HTTP需要我们自己在编写一部分代码才能很好的同步HTTP来完成客户端与服务器端的信息交互.libcurl对HTTP等协议进行了很好的封装,于是采用libcurl来完成图片上传的功能. 1.libcurl简单认识 libcurl支持用不同的协议连接和沟通不同的服务器,其支持http, https, ftp, gopher

C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下载编译libcurl 下载curl源码,找到vs工程,按照x86 x64 并对应debug和release编译出静态库lib 2,构建工程 1)curl头文件和lib拷贝到工程目录 2)配置附加包含目录libcurl中的include和附加库目录libcurl中的lib目录 3)添加预编译宏USE_OPENSSL和CURL_STATIC

libcurl教程

名称 libcurl 的编程教程 目标 本文档介绍使用libcurl编程的一般原则和一些基本方法.本文主要是介绍 c 语言的调用接口,同时也可能很好的适用于其他类 c 语言的接口. 跨平台的可移植代码 libcurl库背后的开发人员投入了相当大的努力确保libcurl可以在很多不同的系统和环境里工作. 全局的准备 程序必须初始化一些libcurl的全局函数.这意味着不管你准备使用libcurl多少次,你都应该,且只初始化一次.当你的程序开始的时候,使用 curl_global_init() 这个

windows下编译支持https的libcurl

本文参考http://blog.csdn.net/fragmentalice/article/details/39430293特此感谢.公司项目中用到几个http get请求,用的libcurl开源库.当新需求接入第三方接口的时候,需要改成支持https,发现以前的libcurl库并不支持.所以要重新编译一个.具体编译环境如下:硬件:CPU:Intel Core(TM) i3-3250 CPU @ 3.00GHzRAM:4GB (3.41GB可用)GPU:板载集成显卡软件:Windows 7 S

在Linux用libcurl.a在链接的时候出错

其实出错是因为curl链接的时候需要别的库.我用如下方法解决 1.http://curl.haxx.se/download/curl-7.45.0.tar.gz官网下载源码 2../configure --disable-ldap --disable-ldaps make cp ./lib/.libs/libcurl.a ../pathto/project 3.链接时加参数:-lidn -lrt -lcrypto -lssl 如:-lidn -lrt -lcrypto -lssl ./lib/l

libcurl实现解析(3) - libcurl对select的使用

1.前言 在本系列的前一篇文章中,介绍了libcurl对poll()的使用.参考"libcurl原理解析(2) - libcurl对poll的使用". 本篇文章主要分析curl_poll()中对select()的封装使用.与前一篇类似,我们只分离出与select相关的代码. 2.curl_poll函数分析 这个函数中使用到的一些其它的数据结构,可以参考前一篇文章中的介绍.本篇不再介绍. /* 这个函数是对poll()的封装.如果poll()不存在,则使用select()替代. 如果使用