c++ libcurl get 请求返回 0 但仍在控制台中打印

c++ libcurl get request is returning 0 but still printing in the console

我已经在 ubuntu 20.4 上安装了 libcurl,并且一直在使用它。我决定创建一个程序,可以从 Internet 写入文件。所以我写了这个。

#include <iostream>
#include <string>
#include <curl/curl.h>
#include <fstream>
#include <unistd.h>

int main() {

  std::ofstream htmlFile("index.html");

  auto curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");

    curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);


    htmlFile <<curl_easy_perform(curl);

    

    htmlFile.close();

  } 

  return 0;
}

当我 运行 这个文件时,我通过控制台得到了我的 apache 网络服务器 html 代码。但是当查看我要写入的文件时,只有一个零。

我很难过,我见过很多不同的方法来做到这一点。我发现 html 被记录到控制台很奇怪,但它所做的只是 return 0.

curl_easy_performreturns一个CURLcode。其中“CURLE_OK (0) 表示一切正常”。这就是写入您的文件的内容。

如果要捕获程序内部的文字,需要设置回调函数CURLOPT_WRITEFUNCTION and also provide somewhere to store the data via CURLOPT_WRITEDATA

示例:

#include <curl/curl.h>
#include <fstream>
#include <string>

size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) {
    std::string& data = *static_cast<std::string*>(userdata);
    size_t len = size * nmemb;

    // append to the string:
    data.append(ptr, len);
    return len;
}

int main() {
    auto curl = curl_easy_init();
    if(curl) {
        std::string data; // we'll store the data in a string

        curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");
        curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);

        // provide a pointer to where you'd like to store the data:
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);

        // provide a callback function:
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

        if(curl_easy_perform(curl) == CURLE_OK) {
            std::ofstream htmlFile("index.html");
            if(htmlFile)
                htmlFile << data; // all's well, store the data in the file.
        }

        curl_easy_cleanup(curl);
    }
}