将CURL转换为字符串时为空值

时间:2017-05-17 20:47:55

标签: c++ curl

我想获取页面的源代码,我有这个函数来填充字符串。

我的标题文件:

class Explorateur {
public:
    Explorateur();
    ~Explorateur();
    std::string RecupererCodeSource(std::string pAdresse);

    static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
    {
        ((std::string*)userp)->append((char*)contents, size * nmemb);
        return size * nmemb;
    }

};

我的班级档案:

std::string Explorateur::RecupererCodeSource(std::string pAdresse)
{
      CURL *curl;
      CURLcode res;
      std::string readBuffer;

      curl = curl_easy_init();
      if(curl)
      {
        curl_easy_setopt(curl, CURLOPT_URL, pAdresse);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        std::cout << "curl  : " << curl << std::endl;
        res = curl_easy_perform(curl);
        std::cout << "res  : " << res << std::endl;
        curl_easy_cleanup(curl);

      }
      std::cout << "Read : " << readBuffer << std::endl;
      return readBuffer;
}

我的主要人物:

int main()
{
    Explorateur explorateur;
    std::string valeur = explorateur.RecupererCodeSource("https://www.google.com/");
    return 0;
}

结果不是例外,它是空的,你知道为什么吗?

curl  : 0x1450d60
res  : 6
Read :

1 个答案:

答案 0 :(得分:1)

作为C库的Lib Curl遵循旧的&#34;好&#34;可变参数设计。这就是为什么在编译时你的代码完全出乎意料的事情。

具有

CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...) 

并在您的代码中

curl_easy_setopt(curl, CURLOPT_URL, pAdresse);

产生你正在目睹的行为。

将代码更改为此

curl_easy_setopt(curl, CURLOPT_URL, pAdresse.c_str());

甚至更好,如果你使用C ++&gt; = 11

curl_easy_setopt(curl, CURLOPT_URL, pAdresse.data());

它还活着))。