【问题标题】:c Curl get request to variablec Curl 获取对变量的请求
【发布时间】:2015-10-02 04:14:52
【问题描述】:

当然我遗漏了一些明显的东西,但是试图发出 curl 获取请求并将响应返回给变量。

size_t write_to_string(void *ptr, size_t size, size_t nmemb, std::string stream){
    size_t realsize = size * nmemb;
    std::string temp(static_cast<const char*>(ptr), realsize);

    cout << temp << endl;

    return realsize;
}    

CURLcode curl_get(const std::string& url, std::ostream& os, long timeout = 30){
    CURLcode code(CURLE_FAILED_INIT);
    CURL* curl = curl_easy_init();

    string *response;

    if (curl){

        if (CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_to_string))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_FILE, &os))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, response))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout))
            && CURLE_OK == (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str())))
        {
            code = curl_easy_perform(curl);
        }
        curl_easy_cleanup(curl);
    }

    std::string a = *response;

    return code;

}

在我尝试过的十几种方法中,响应总是 null 或越界指针。 cout 确实显示了正确的响应。 我要做的就是为所有 curl get 调用创建一个通用函数并让它返回 get 数据。 c新手,很抱歉,如果我忽略了一些简单的事情。

【问题讨论】:

  • 您将其标记为 'c' 但是代码引用了 std::strings&amp; 和类似的,在 C 中不存在。请删除 'c' 标记并添加 'c++' 标记。

标签: c++ curl get


【解决方案1】:
  1. 您声明write_to_string 接受std::string,但您将一个指向std::string 的指针传递给它(通过CURLOPT_WRITEDATA)。
  2. 你不会在write_to_string 中对std::string stream 做任何事情。
  3. 您将response 声明为std::string*,但未对其进行初始化,因此您有悬空指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2020-09-19
    • 2021-05-05
    • 2021-03-17
    相关资源
    最近更新 更多