我正在使用CURL连接到多个xml提要并在页面加载时处理它们。不幸的是,每隔一段时间页面就不会响应,我的脚本也会停止。这是我正在使用的代码示例。我将超时设置为1,但这似乎不起作用。然后我将超时设置为0.0001只是为了测试今天的事情,它仍然在xml提要中。你有没有关于如何在脚本永远占用时强制卷曲超时的想法。
foreach($urls as $k => $v) {
$curl[$k] = curl_init();
curl_setopt($curl[$k], CURLOPT_URL, $v);
curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl[$k], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl[$k],CURLOPT_CONNECTTIMEOUT, 1);
答案 0 :(得分:38)
卷曲有两种不同的超时 - 请参阅curl_setopt
manual's page:
CURLOPT_CONNECTTIMEOUT
号码 尝试等待的秒数 连接。使用0无限期等待。
并且:
CURLOPT_TIMEOUT
最大数量 允许cURL函数的秒数 执行。
它们都有“毫秒”版本:CURLOPT_CONNECTTIMEOUT_MS
和CURLOPT_TIMEOUT_MS
。
在你的情况下,你可能也想配置第二个:似乎需要时间的不是连接,而是服务器端的feed的构造。
答案 1 :(得分:1)
查看CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT之间的区别
答案 2 :(得分:0)
我正在使用Curl库从Apache Server下载文件。 downloadFileWithCurlLibrary fonction有两个输入。 FileUrl是将下载表单服务器的文件。 示例:www.abc.com/myfile.doc。 locFile是您要保存的目录和文件名。 例如:。/home/projectx/myfile.doc
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <curl/curl.h>
int downloadFileWithCurlLibrary(char *FileUrl,char *locFile)
{
char dlFile[1024];
CURL *curl_handle;
FILE *pagefile;
memset(dlFile,0x0,sizeof(dlFile));
/* Create URL */
sprintf(dlFile,"%s",FileUrl);
curl_global_init(CURL_GLOBAL_ALL);
/* init the curl session */
curl_handle = curl_easy_init();
/* Set timeout 3 min = 3*60 sec here. */
curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 1800 );
/* set URL to get here */
if (curl_easy_setopt(curl_handle, CURLOPT_URL, dlFile) != CURLE_OK)
return -1;
/* Switch on full protocol/debug output while testing */
// if (curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L) != CURLE_OK)
// return -1;
/* disable progress meter, set to 0L to enable and disable debug output */
if (curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L) != CURLE_OK)
return -1;
/* send all data to this function */
if (curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data) != CURLE_OK)
return -1;
/* open the file */
pagefile = fopen(locFile, "wb");
if (pagefile)
{
/* write the page body to this file handle. CURLOPT_FILE is also known as
CURLOPT_WRITEDATA*/
if (curl_easy_setopt(curl_handle, CURLOPT_FILE, pagefile) != CURLE_OK)
return -1;
/* get it! */
if (curl_easy_perform(curl_handle) != 0)
return -1;
/* close the header file */
fclose(pagefile);
}
else
{
return -1;
}
/* cleanup curl stuff */
curl_easy_cleanup(curl_handle);
return 0;
}