Libcurl错误无法将接收到的数据写入磁盘/应用程序

Jim*_*Jim 3 c++ oop libcurl

我正在编写一个类,以使用libcurl2创建一个简单的http get请求。我得到以下错误:

Libcurl错误无法将接收到的数据写入磁盘/应用程序

我对C ++相当陌生,仍然在学习,但我猜想它与Access修饰符或范围有关

我希望有人可以帮助我。

类HTTPconnection

#include "HTTPconnection.h"
#include <iostream>
#include <string>

using namespace httptest;

HTTPconnection::HTTPconnection()
{
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
}

size_t HTTPconnection::write_callback(char * data, size_t 
size, size_t nmemb, std::string * writerData)
{
    if (writerData == NULL)
        return 0;

    writerData->append(data, size*nmemb);
    return size * nmemb;
}

std::string HTTPconnection::createConnection(const char *url, const char *proxy)
{
    curl_easy_setopt(HTTPconnection::curl, CURLOPT_URL, url);

    curl_easy_setopt(HTTPconnection::curl, CURLOPT_WRITEFUNCTION, &HTTPconnection::write_callback);
    curl_easy_setopt(HTTPconnection::curl, CURLOPT_WRITEDATA, &HTTPconnection::buffer);

    res = curl_easy_perform(HTTPconnection::curl);
    std::cout << curl_easy_strerror(res);

    return buffer;
}


HTTPconnection::~HTTPconnection()
{
    curl_easy_cleanup(curl);
    curl_global_cleanup();
}
Run Code Online (Sandbox Code Playgroud)

HTTP连接

#ifndef HTTPconnection_H
#define HTTPconnection_H

#include <string>
#include "libcurl/include/curl/curl.h"

#ifdef _DEBUG
#pragma comment(lib, "libcurl/lib/libcurl_a_debug.lib")
#else
#pragma comment(lib, "libcurl/lib/libcurl_a.lib")
#endif


namespace httptest
{
    class HTTPconnection
    {
    public:
        //Default Constructor
        HTTPconnection();
        std::string createConnection(const char *url, const char *proxy);

        //Destructor
        ~HTTPconnection();

    private:

        //methods
        size_t write_callback(char *data, size_t size, size_t nmemb, std::string *writerData);

        //members
        std::string buffer;
        CURL *curl;
        CURLcode res;

    };
}

#endif // !HTTPconnection_H 
Run Code Online (Sandbox Code Playgroud)

Art*_*sky 5

从对curllib API的调用中获得的错误表明在保存接收到的数据期间发生了问题。

既然已经设置了回调curl,则认为回调已失败。

Curl将假定回调未能处理接收到的数据,因为返回值与接收到的字节数不同。

在您的情况下,这意味着您已使用进入分支return 0;-您应该能够通过在回调中设置断点来对其进行调试。

在回调的最后一个参数中收到nullptr的原因-您已将其声明为类的非静态成员,这意味着它已隐藏第一个参数,而调用此回调的C代码对此一无所知。

您的情况下的解决方案应该很简单-将write_callback声明为静态(或免费)函数。在其中设置断点,并查看curl提供的所有参数均有效。您可能需要更改回调调用约定,以匹配curllib期望的功能签名。