【发布时间】: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&和类似的,在 C 中不存在。请删除 'c' 标记并添加 'c++' 标记。