分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Curl命令简介

发布时间:2023-09-06 01:09责任编辑:傅花花关键词:url

相关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命令:

#include <curl/curl.h> ???CURL *curl; ?// 声明一个CURL对象 ???CURLcode res; //如果成功,会返回一个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"); ???char url_buffer[MAX_BUFFER_LEN_M]; ???url_buffer[0] = ‘\0‘; ???char post_buffer[MAX_BUFFER_LEN_M]; ???post_buffer[0] = ‘\0‘;
 ???bds_xl_str_t xl_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("Curl http request failed [%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("Init curl failed"); ???????return -1; ???}

     Json::Reader reader;
     Json::Value value;
     if (!reader.parse(xl_str.c_str(), xl_str.c_str() + xl_str.size(), value))
     {
        XGL_LOG_WARNING("Json parse failed [%s]", tdata.xl_str.c_str());
        return -1;

      }

 

回调函数:

size_t write_buffer(void *buffer, size_t size, size_t nmemb, void *userp){ ???if (!buffer) ???{ ???????XGL_LOG_WARNING("get_user_portray: return buffer is null"); ???} ???if (size* nmemb > MAX_BUFFER_LEN_L -1) ???{ ???????XGL_LOG_WARNING("buffer is too long"); ???} ???bds_xl_str_t *receive_str = static_cast<bds_xl_str_t*>(userp); ???return receive_str->append((const char*)buffer, size * nmemb);}

bds_xl_str_t的定义:

const size_t XL_STR_SIZE = 1024 * 16;
#define BDS_ASSERT(cond) bds_assert< (cond) >::assert_true()template <bool condition>struct bds_assert{};template <>struct bds_assert<true>{ ???static void assert_true(){}};// 定长string wrappertemplate <size_t bucket>struct bds_str_t{ ???bds_str_t() ???{ ???????BDS_ASSERT(bucket > 1024); ???????data[0] = ‘\0‘; ???????len = 0; ???} ???inline void clear() ???{ ???????data[0] = ‘\0‘; ???????len = 0; ???} ???// 返回实际写入的字符数目,空间不足时,直接return 0,不进行写入 ???inline size_t append(const char* str, size_t str_len) ???{ ???????if (str_len > remains()) ???????{ ???????????return 0; ???????} ???????memcpy(data + len, str, str_len); ???????len += str_len; ???????data[len] = ‘\0‘; ???????return str_len; ???} ???inline size_t remains() const ???{ ???????return (len + 1) < bucket ? (bucket - len - 1) : 0; ???} ???inline const char * c_str() const ???{ ???????return data; ???} ???inline size_t size() const ???{ ???????return len; ???} ???char data[bucket]; ???size_t len;};typedef bds_str_t<XL_STR_SIZE> bds_xl_str_t;

Curl命令简介

原文地址:http://www.cnblogs.com/myyan/p/7486202.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved