卷曲连接超时不起作用

时间:2009-09-13 19:01:30

标签: php curl timeout

我正在使用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); 

3 个答案:

答案 0 :(得分:38)

卷曲有两种不同的超时 - 请参阅curl_setopt manual's page

  

CURLOPT_CONNECTTIMEOUT
号码   尝试等待的秒数   连接。使用0无限期等待。

并且:

  

CURLOPT_TIMEOUT
最大数量   允许cURL函数的秒数   执行。

它们都有“毫秒”版本:CURLOPT_CONNECTTIMEOUT_MSCURLOPT_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;
}