【问题标题】:receiving data after curl_easy_perform在 curl_easy_perform 之后接收数据
【发布时间】:2010-12-27 13:50:02
【问题描述】:

我有以下问题:我如何在char * 缓冲区中写入返回http-response 的数据?我找到了几种方法:

  1. 使用CURLOPT_WRITEDATACURLOPT_WRITEFUNCTION。但CURLOPT_WRITEDATA 需要文件指针 (FILE *)。使用带有回调函数的CURLOPT_WRITEFUNCTION 在我看来是个怪癖......
  2. 使用curl_easy_sendcurl_easy_recv。但在这种情况下,我需要手动编写所有 POST 标头...

还有其他更优雅的方法吗?例如将char *缓冲区指针传递给某个函数以获取http响应。

【问题讨论】:

    标签: c++ c linux libcurl


    【解决方案1】:

    实际上 CURLOPT_WRITEDATA 和 CURLOPT_WRITEFUNCTION 可以与任何指针类型一起使用。只要您的函数与该指针类型兼容。

    例如:

        ...
        client_t *client;
        CURL *conn;
        ...
        curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, read_data);
        curl_easy_setopt(conn, CURLOPT_WRITEDATA, client);
        ...
    
    static size_t read_data(void *ptr,
                            size_t size,
                            size_t nmemb,
                            client_t *client)
    {
         memcpy(client->data, ptr, size * nmemb);
         return size * nmemb;
    }
    

    【讨论】:

    • 好答案,这就是它应该做的。哦,别忘了 ptr 可能只是整个响应的一部分,这取决于您使用 curl_easy_setopt 设置的选项。
    • curl 没有提供“你在我给你的缓冲区中放入了多少数据”调用似乎有点愚蠢。
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2015-04-30
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多