Curl命令简介
2017-09-06 18:06
519 查看
相关1:http://blog.csdn.net/windows_nt/article/details/9630567
相关2:http://php.net/manual/zh/function.curl-setopt.php
1、使用curl命令发送post数据:
curl-d‘{post内容}’ip(或域名)/path?get参数
如:curl-d‘{post内容}’baidu.com/ask?p=xx
2、使用curl命令发送get数据
curl‘请求url’
3、c++下使用curl命令:
Json::Readerreader;
Json::Valuevalue;
if(!reader.parse(xl_str.c_str(),xl_str.c_str()+xl_str.size(),value))
{
XGL_LOG_WARNING("Jsonparsefailed[%s]",tdata.xl_str.c_str());
return-1;
}
回调函数:
bds_xl_str_t的定义:
相关2:
1、使用curl命令发送post数据:
curl-d‘{post内容}’ip(或域名)/path?get参数
如:curl-d‘{post内容}’baidu.com/ask?p=xx
2、使用curl命令发送get数据
curl‘请求url’
3、c++下使用curl命令:
#include<curl/curl.h> CURL*curl;//声明一个CURL对象 CURLcoderes;//如果成功,会返回一个CURLE_OK标记,反之,会给你一个数字,你可以在curl.h里面找到对应的解释。 curl=curl_easy_init();//初始化一个Curl对象,它会生成一个CUrl的指针返回。如果返回是NULL,就是建立链接失败。 curl_slist*plist=curl_slist_append(NULL, "Content-Type:application/json;charset=UTF-8"); charurl_buffer[MAX_BUFFER_LEN_M]; url_buffer[0]='\0'; charpost_buffer[MAX_BUFFER_LEN_M]; post_buffer[0]='\0';
bds_xl_str_txl_str; xl_str.clear();
snprintf(url_buffer,sizeof(url_buffer),g_conf.req_url.c_str()); snprintf(post_buffer,sizeof(post_buffer),"{\"acid\":%d,\"request\":{\"ids\":{\"type\":%d,\"id\":\"%s\"}}}", g_conf.account_id,id_type,imei.c_str()); if(curl) { curl_easy_setopt(curl,CURLOPT_URL,url_buffer);//请求地址 curl_easy_setopt(curl,CURLOPT_POSTFIELDS,post_buffer);//请求的post内容 curl_easy_setopt(curl,CURLOPT_HTTPHEADER,plist);//将plist设置的字符串,附加到Http请求消息头上 curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_buffer);//设置回调接口write_buffer curl_easy_setopt(curl,CURLOPT_WRITEDATA,&xl_str);//指定一个对象,用于你在回调函数的时候将收到的数据片拼接成一个完整的。 curl_easy_setopt(curl,CURLOPT_NOSIGNAL,1L);////注意,毫秒超时一定要设置这个,否则会core curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,40L);//设置超时时间(允许cURL函数执行的最长毫秒数。),如果服务器在40毫秒不返回,Curl就会触发一个TimeOUT错误,CURLOPT_TIMEOUT对应的是秒 res=curl_easy_perform(curl);//开始执行你的url下载活动,他返回一个CUrlRes对象 if(CURLE_OK!=res) { XGL_LOG_WARNING("Curlhttprequestfailed[%d]",res); curl_slist_free_all(plist); curl_easy_cleanup(curl); return-1; } curl_slist_free_all(plist);//当你一次抓取执行完毕,你必须设置curl_slist_free_all(plist);除非你的plist在下次使用的时候和以前一样,则不必做这样的操作。但是最终你必须curl_slist_free_all(plist);否则会有内存泄露。 curl_easy_cleanup(curl);//当你执行完你的网页抓取,一定不要忘了curl_easy_cleanup(m_pCurl);释放你这个对象,否则同理,你的内存会泄露。 } else { XGL_LOG_WARNING("Initcurlfailed"); return-1; }
Json::Readerreader;
Json::Valuevalue;
if(!reader.parse(xl_str.c_str(),xl_str.c_str()+xl_str.size(),value))
{
XGL_LOG_WARNING("Jsonparsefailed[%s]",tdata.xl_str.c_str());
return-1;
}
回调函数:
size_twrite_buffer(void*buffer,size_tsize,size_tnmemb,void*userp)
{
if(!buffer)
{
XGL_LOG_WARNING("get_user_portray:returnbufferisnull");
}
if(size*nmemb>MAX_BUFFER_LEN_L-1)
{
XGL_LOG_WARNING("bufferistoolong");
}
bds_xl_str_t*receive_str=static_cast<bds_xl_str_t*>(userp);
returnreceive_str->append((constchar*)buffer,size*nmemb);
}
bds_xl_str_t的定义:
constsize_tXL_STR_SIZE=1024*16;
#defineBDS_ASSERT(cond)bds_assert<(cond)>::assert_true()
template<boolcondition>
structbds_assert{};
template<>
structbds_assert<true>
{
staticvoidassert_true(){}
};
//定长stringwrapper
template<size_tbucket>
structbds_str_t
{
bds_str_t()
{
BDS_ASSERT(bucket>1024);
data[0]='\0';
len=0;
}
inlinevoidclear()
{
data[0]='\0';
len=0;
}
//返回实际写入的字符数目,空间不足时,直接return0,不进行写入
inlinesize_tappend(constchar*str,size_tstr_len)
{
if(str_len>remains())
{
return0;
}
memcpy(data+len,str,str_len);
len+=str_len;
data[len]='\0';
returnstr_len;
}
inlinesize_tremains()const
{
return(len+1)<bucket?(bucket-len-1):0;
}
inlineconstchar*c_str()const
{
returndata;
}
inlinesize_tsize()const
{
returnlen;
}
chardata[bucket];
size_tlen;
};
typedefbds_str_t<XL_STR_SIZE>bds_xl_str_t;
相关文章推荐