Curl命令简介

相关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 wrapper
template <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;
时间: 2024-12-19 00:14:25

Curl命令简介的相关文章

Linux系统curl命令

curl命令 curl  -I  网址    //-I :省略源代码查看,内容如下: 我们查看的是HTTP/1.1 200 OK 这一行 常用状态吗有:200 301 302 404 403 502 503 上述状态码中,只有  200 是OK 的 如果出现301 302 ,它可能是因为在服务端设置了  跳转 ,内容如下: 上图显示,HTTP/1.1 301 设置了跳转,跳转到了下面:Location:http://www.aminglinux.com/bbs/forum.php -x  可以指

curl 命令获取网络网站的响应码

curl命令参数很多,博主很多都没有用过.今天发现可以用-w参数挺好用的. -w:--write-out,作用就是输出点什么.curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出.输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB.curl会用合适的值来替代输出格式中的变量,所有可用变量如下: url_effective 最终获取的url地

curl 命令详解

curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS.ftp等众多协议,还支持POST.cookies.认证.从指定偏移处下载部分文件.用户代理字符串.限速.文件大小.进度条等特征.做网页处理流程和数据检索自动化,curl可以祝一臂之力. -a/--append 上传文件时,附加到目标文件 -A/--user-agent 设置用户代理发送给服务器 -an

Windows下安装使用curl命令

本机环境 Windows 7 方法/步骤 1.进入网站 https://curl.haxx.se/download/?C=M;O=D网站 2.根据自己的操作系统位数和是否需要SSL下载相应的版本. 这里下载curl-7.33.0-win64-ssl-sspi.zip,下载完成之后解压到需要使用curl命令的目录.这里为了方便我先直接解压到当前目录. 3.在本窗口下打开运行该命令 [没有建立系统环境变量,所以只能在本目录下运行],检测是否可以正常运行 注意: 想得到上面的"在此处打开命令窗口(W)

windows(64位)下使用curl命令

Curl命令可以通过命令行的方式,执行Http请求.在Elasticsearch中有使用的场景,因此这里研究下如何在windows下执行curl命令. 工具下载 在官网处下载工具包:http://curl.haxx.se/download.html 使用方式一:在curl.exe目录中使用 解压下载后的压缩文件,通过cmd命令进入到curl.exe所在的目录. 由于博主使用的是windows 64位 的系统,因此可以使用I386下的curl.exe工具. 进入到该目录后,执行curl --hel

grep命令和curl命令的使用方法

今天看了汪海写的python爬虫教程,说实话看不懂...于是就用bash下的工具自己开始写了一个抓取糗事百科的糗事的脚本,期间搜索到了grep和curl命令的一些使用技巧. grep命令,使用grep命令来进行文本的通配,一般只是显示匹配的行,但是使用以下几个参数就可以显示上下文了: -C [num] #显示匹配行的上下各num行 -A [num] #显示匹配行的后num行 -B [num] #显示匹配行的前num行 curl这个下载工具,或者已经算不上是下载工具了,因为curl过于强大了,主要

linux查看硬件和系统信息的相关命令简介

linux查看硬件和系统信息的相关命令简介 <转> [[email protected] ~] # uname -a               # 查看内核/操作系统/CPU信息的linux系统信息命令[[email protected] ~] # head -n 1 /etc/issue   # 查看操作系统版本,是数字1不是字母L[[email protected] ~] # cat /proc/cpuinfo      # 查看CPU信息的linux系统信息命令[[email prot

curl 命令

curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS.ftp等众多协议,还支持POST.cookies.认证.从指定偏移处下载部分文件.用户代理字符串.限速.文件大小.进度条等特征.做网页处理流程和数据检索自动化,curl可以祝一臂之力. 语法 curl (选项) (参数) 选项 -a/--append -A/--user-agent <agent st

curl命令详解

对于windows用户如果用Cygwin模拟unix环境的话,里面没有带curl命令,要自己装,所以建议用Gow来模拟,它已经自带了curl工具,安装后直接在cmd环境中用curl命令就可,因为路径已经自动给你配置好了. linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻译的对不对,如果有误的地方,还请指正. -a/--append 上传文件时,附