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 错误的主要内容,如果未能解决你的问题,请参考以下文章

libcurl封装http请求工具类

libcurl库进行http通讯-一些基本的函数

curl错误码大全

GuzzleHttp\Exception\RequestException cURL 错误 3:(参见 https://curl.haxx.se/libcurl/c/libcurl-errors.ht

Libcurl 错误:curl/curl.h:没有这样的文件或目录

libcurl传输错误,错误码180