gpt4 book ai didi

c++ - 如何使 libcurl C++ 调用超时和/或知道调用中何时发生超时

转载 作者:可可西里 更新时间:2023-11-01 18:36:17 26 4
gpt4 key购买 nike

我正在尝试使用我的 C++ 程序下载远程 html 页面,但是对于某些 URL 会发生超时,但我不知道如何处理这个问题,所以程序将无限期地挂起。

virtual void downloadpage(string pageaddress) {
CURL *curl;
CURLcode informationdownloaded;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13");
curl_easy_setopt(curl, CURLOPT_URL, pageaddress.c_str());
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writepageinformation);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &pageinformation);
informationdownloaded = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}

这是我通过“writepageinformation”函数将页面的 html 源代码下载到名为“pageinformation”的字符串变量中的函数。

最佳答案

informationdownloaded = curl_easy_perform(curl);

您还可以为下载指定超时

curl_easy_setopt(hCurl, CURLOPT_TIMEOUT, iTimeoutSeconds); // timeout for the URL to download

在下载整个文件之前,这是一个阻塞调用。如果您有兴趣中断被阻止的调用(用于终止信号),请安装进度回调,如下所示

curl_easy_setopt(hCurl, CURLOPT_NOPROGRESS, 0);
curl_easy_setopt(hCurl, CURLOPT_PROGRESSFUNCTION, progress_callback);
curl_easy_setopt(hCurl, CURLOPT_PROGRESSDATA, this);

static int progress_callback(void *clientp,
double dltotal,
double dlnow,
double ultotal,
double ulnow)
{
CLASS &obj = *(CLASS*)clientp;


if (obj.exit)
return 1; // if u want the signal curl to unblock and return from curl_easy_perform

return 0; // if u want the callback to continue
}

关于c++ - 如何使 libcurl C++ 调用超时和/或知道调用中何时发生超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7301448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com