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_perform
returns一个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);
}
}
我已经在 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_perform
returns一个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);
}
}