int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
_getch();
return 0;
}
string contents = "";
字符串
我想将curl html内容的结果保存为字符串,该如何操作?这是一个愚蠢的问题,但不幸的是,我在C++的cURL示例中找不到任何地方,谢谢!
8条答案
按热度按时间7uhlpewt1#
您必须使用
CURLOPT_WRITEFUNCTION
来设置写入回调。我现在还不能测试编译这个函数,但是这个函数看起来应该很接近;字符串
然后通过做来调用它;
型
调用后,
readBuffer
应该有您的内容。编辑:您可以使用
CURLOPT_WRITEDATA
来传递缓冲区字符串,而不是使其成为静态的。在本例中,为了简单起见,我将其设置为静态。here是一个很好的页面(除了上面的链接示例),它解释了这些选项。Edit 2:按照要求,这里有一个没有静态字符串缓冲区的完整工作示例;
型
s8vozzvw2#
在我的博客上,我有一个简单的 Package 器类published来执行这个任务。
使用示例:
字符串
下面是头文件:
型
下面是源代码:
型
polkgigr3#
使用“新”的C++11 lambda功能,这可以在几行代码中完成。
字符串
注意,需要使用__stdcall强制转换来遵守C调用约定(cURL是一个C库)
lmyy7pcs4#
这可能不会立即起作用,但应该给予你一个想法:
字符串
t0ybt7op5#
给出了一个有用但简单的解决方案,它重载了std::ostream::operator<<
字符串
所采用方法的可能缺点可能是:
型
这意味着它涵盖了所有已知的指针类型。
nhaq1z216#
基于@JoachimIsaksson的回答,这里是一个更详细的输出,它处理内存不足,并对curl的最大输出有限制(因为CURLOPT_MAXFILESIZE仅基于头信息而不是传输的实际大小)。
字符串
hjzp0vay7#
我将Joachim Isaksson的答案与CURLOPT_WRITEFUNCTION的现代C++适配一起使用。
没有C风格强制转换的编译器的唠叨。
字符串
o2gm4chl8#
这里有一个完整的例子,如何使用curl将网站的内容放入C++中的std::string。
编译时不要忘记标志-lcurl。
字符串