2011-01-12 117 views
2

问候大家卷曲超时和连接超时的最佳值

我正在研究一个小爬行引擎,并使用curl从各个网站请求页面。问题是什么建议我应该设置我的connection_timeout和超时值?我通常会抓取的东西是包含大量图像和文本的页面。

+0

你应该接受一些你的问题的答案与复选标记。 – zerkms 2011-01-12 03:31:36

+0

如果你想抓取,你应该设置为无超时,而不是一次性产生curl(顺序),你应该分叉多个进程卷曲 – ajreal 2011-01-12 04:07:44

回答

9

cURL知道两个不同的超时。
对于CURLOPT_CONNECTTIMEOUT,无论网站包含多少文本或其引用的图像有多少其他资源都不重要,因为这是连接超时,甚至服务器在连接建立之前无法知道所请求页面的大小。
对于CURLOPT_TIMEOUT它确实很重要。即使是大页面,也只需要少量数据包,但服务器可能需要更多时间来组合输出。此外,重定向和其他事物(例如代理)的数量可能会显着增加响应时间。

一般而言,超时的“最佳值”取决于您的网络和服务器的要求和条件。这些条件是变化的主题。因此没有“最佳价值”。
我推荐使用较短的超时时间,稍后重试失败的下载。

Btw cURL不会自动下载响应中引用的资源。您必须手动进行此操作,然后再拨打curl_exec(新鲜超时)。

-1

我用

 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30); 
curl_setopt($ch, CURLOPT_TIMEOUT,60); 
0

的最好的回应是瑞克的一个。

我有一个代理检查器,在我的基准测试中,我看到大多数工作代理需要不到10秒的时间才能连接。

因此,我使用ConnectionTimeOut和TimeOut的时间为10秒,但在我的情况下,您必须决定要使用多少次,因此请从大值开始,使用curl_getinfo查看时间基准并减少值。

注意:连接超过5秒或10秒的代理对我来说没用,所以我使用该值。

0

是的。如果您的目标是查询另一个站点的代理,则这样的级联连接将需要相当长的时间来执行curl调用。

特别是当您遇到间歇性卷曲问题时,请首先检查这些值。

0

如果将其设置得太高,那么脚本将会很慢,因为一个停止的URL将会花费您在CURLOPT_TIMEOUT中设置的所有时间来完成处理。如果您不使用代理服务器,那么你可以只设置下列值

CURLOPT_TIMEOUT = 3 CURLOPT_CONNECTTIMEOUT = 1

然后你可以通过失败的URL在以后的时间来仔细检查他们。