大家好
我正在开发一个小型爬虫引擎,使用curl从各个网站请求页面。我的问题是,您建议我将连接超时和超时值设置为多少?我通常会爬取包含大量图像和文本的页面。
大家好
我正在开发一个小型爬虫引擎,使用curl从各个网站请求页面。我的问题是,您建议我将连接超时和超时值设置为多少?我通常会爬取包含大量图像和文本的页面。
cURL支持两种不同的超时时间。
对于CURLOPT_CONNECTTIMEOUT
,网站包含多少文本或引用多少像图片这样的其他资源并不重要,因为这是一个连接超时,直到建立连接之前甚至服务器也无法知道所请求页面的大小。
而对于CURLOPT_TIMEOUT
,就很重要了。即使很大的页面只需要几个数据包就可以传输完成,但服务器可能需要更多时间来组装输出。此外,重定向和其他因素(如代理)也会显著增加响应时间。
一般来说,"最佳值"取决于您的要求以及网络和服务器的条件。这些条件是变化的,因此没有"最佳值"。
我建议使用相对较短的超时时间,并稍后重试下载失败的内容。
顺便提一下,cURL不会自动下载响应中引用的资源。您需要手动调用curl_exec
进行进一步下载(并设置新的超时时间)。
最好的回答是Rik的。
我有一个代理检查器,在我的基准测试中,我发现大多数工作代理连接只需不到10秒钟。
因此,我使用10秒钟的ConnectionTimeOut和TimeOut,但这只是针对我的情况。您必须决定要使用多长时间,因此请从大量开始,使用curl_getinfo查看时间基准,并减少该值。
注意:对于我来说,需要超过5或10秒才能连接的代理是无用的,这就是为什么我使用这些值的原因。
是的。如果您的目标是代理查询另一个站点,这样的级联连接将需要像这些值一样长的时间来执行curl调用。
特别是当您遇到间歇性的curl问题时,请首先检查这些值。
我使用
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 60);