Curl命令简介

相关1:http://blog.youkuaiyun.com/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;

 

转载于:https://www.cnblogs.com/myyan/p/7486202.html

### 什么是 cURL 命令cURL 是一个强大的命令行工具,用于在不同协议之间传输数据。它支持多种协议(如 HTTP、HTTPS、FTP 等),并且可以轻松地发送请求、接收响应以及处理各种网络问题[^1]。 ### cURL 常用命令 以下是 cURL 的一些常用命令及其功能: #### 发送 POST 请求 可以通过以下命令向指定 URL 发送 POST 请求,并附带数据: ```bash curl -X POST https://www.example.com -d "param1=value1&param2=value2" ``` 此命令会向 `https://www.example.com` 发送一个包含参数的 POST 请求[^1]。 #### 保存重定向输出 若需要将 cURL 的输出保存到文件中,可以使用重定向操作符 `>>` 将结果追加到文件末尾: ```bash curl http://www.linux.com >> linux.html ``` 上述命令会将 `http://www.linux.com` 的内容追加到 `linux.html` 文件中。 #### 错误日志重定向 如果需要将错误信息写入指定文件,可以使用 `-o` 或 `-O` 参数: ```bash curl -o error.log http://example.com ``` 如果文件名指定为纯文本的 `'-'`,则错误信息会被写入标准输出 (stdout)[^2]。 #### 设置超时时间 为了避免长时间等待响应,可以设置最大等待时间: ```bash curl --max-time 10 https://www.example.com ``` 此命令将请求的最大等待时间设置为 10 秒[^3]。 ### 解决常见问题 #### SSL 连接问题 当遇到 SSL 证书验证失败的问题时,可以尝试加入 `-k` 或 `--insecure` 选项忽略证书验证: ```bash curl -k https://www.example.com ``` #### 解读错误代码 cURL 返回的错误代码可以通过官方文档进行查询,了解每个 HTTP 状态码的具体含义。例如: - `404` 表示资源未找到。 - `500` 表示服务器内部错误。 #### 测试 RESTful API 通过模拟不同的 HTTP 方法(如 GET、POST、PUT、DELETE),可以测试 RESTful API 的行为。例如: - 发送 GET 请求: ```bash curl -X GET https://api.example.com/data ``` - 发送 DELETE 请求: ```bash curl -X DELETE https://api.example.com/data/123 ``` ### 示例代码 以下是一个完整的示例,展示如何使用 cURL 发送带参数的 POST 请求并设置超时时间: ```bash curl -X POST https://api.example.com/login \ -d "username=admin&password=secret" \ --max-time 5 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值