libcurl 未初始化的变量 curl 错误
Posted
技术标签:
【中文标题】libcurl 未初始化的变量 curl 错误【英文标题】:libcurl uninitialized variable curl error 【发布时间】:2016-09-03 21:15:47 【问题描述】:我正在尝试发出 HTTP 请求以检索一些 JSON 数据;我得到了 curl 变量未初始化的错误,尽管我使用了 easy_init() 它。任何有关如何解决此错误的帮助都会非常好!
下面是我的代码:
#pragma once
#include "stdafx.h"
#include "RequestJson.h"
#include <string.h>
#include <include/curl/curl.h>
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
class RequestJson
public:
static std::string RequestJsonString(std::string URL)
//set to get the JSON Response on listed loans; open a CSV file and read unemployment and other indices.
::CURL *curl;
CURLcode res;
struct curl_slist *headers = NULL;
std::ostringstream oss;
//curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_slist_append(headers, "Accept: application/json");
curl_slist_append(headers, "Content-Type: application/json");
curl_easy_cleanup(curl);
if (curl)
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer); //define a write-function below.
res = curl_easy_perform(curl);
if (CURLE_OK == res)
char *ct;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if ((CURLE_OK == res) && ct)
return *DownloadedResponse;
//parse the JSON String and return the downloaded string.
static std::string *DownloadedResponse;
static int writer(char *data, size_t size, size_t nmemb, std::string *buffer_in)
if (buffer_in != NULL)
buffer_in->append(data, size * nmemb);
DownloadedResponse = buffer_in;
return size * nmemb;
return 0;
;
【问题讨论】:
“错误”可能只是一个警告,但如果您能告诉我们在哪里您得到了“错误”,将会有所帮助。请编辑您的问题,例如,代码在“错误”行中包含 cmets。还请在问题正文中包含实际的构建输出。如果你没有得到它作为构建错误/警告,你会得到它作为运行时崩溃吗? 感谢 Joachim 的回复,抱歉,我刚刚注意到我在请求之前进行了清理,我已将清理移至函数末尾。现在未解决的外部错误仍然存在。我已经编辑了上面的代码并包含了构建输出。 所以你解决了你最初询问的问题,但现在还有其他问题?然后那些其他问题应该作为另一个问题发布。还是您称之为“未初始化的卷曲变量”的“未解决的外部”错误?请read about how to ask good questions. 谢谢。我将重新编辑此问题以显示第一个错误并发布一个新错误。 最后,为什么DownloadedResponse
是一个指针?你在哪里定义变量?你在哪里初始化(为它分配内存)?你在哪里设置CURLOPT_WRITEDATA
选项?所有这一切看起来都像是等待中的未定义行为。
【参考方案1】:
来自the curl_easy_cleanup
reference:
这个函数必须是最后一个函数来调用一个简单的会话。它与 curl_easy_init 函数相反,必须使用与 curl_easy_init 调用返回的输入相同的句柄来调用。
[强调我的]
当您调用curl_easy_cleanup
时,它清理由curl_easy_init
分配的所有资源。之后就不能再使用CURL
指针了。
正如参考所说:完成后放在最后。
【讨论】:
以上是关于libcurl 未初始化的变量 curl 错误的主要内容,如果未能解决你的问题,请参考以下文章
GuzzleHttp\Exception\RequestException cURL 错误 3:(参见 https://curl.haxx.se/libcurl/c/libcurl-errors.ht