问候每个人
我正在使用一个小型抓取引擎,并使用curl来请求来自各个网站的网页。问题是我应该建议我的connection_timeout和超时值是什么?我通常会爬行的东西会是包含大量图像和文字的页面。
答案 0 :(得分:9)
cURL知道两种不同的超时
对于CURLOPT_CONNECTTIMEOUT
,无论网站包含多少文本或其引用的图像有多少其他资源都无关紧要,因为这是连接超时,甚至服务器在建立连接之前也无法知道所请求页面的大小。
对于CURLOPT_TIMEOUT
来说,这很重要。即使是大型页面也只需要少量数据包,但服务器可能需要更多时间来组装输出。此外,重定向和其他内容(例如代理)的数量可以显着增加响应时间。
一般来说,超时的“最佳价值”取决于您对网络和服务器的要求和条件。这些条件是变化的。因此,没有“一个最好的价值” 我建议使用相当短的超时,然后重试失败的下载。
Btw cURL不会自动下载响应中引用的资源。您必须手动执行此操作,并进一步调用curl_exec
(带有新的超时)。
答案 1 :(得分:0)
最好的回应是rik的一个。
我有一个代理检查器,在我的基准测试中,我看到大多数工作代理连接的时间不到10秒。
所以我对ConnectionTimeOut和TimeOut使用10秒,但在我的情况下,你必须决定你想要使用多少时间,所以从大值开始,使用curl_getinfo查看时间基准并减少值。
注意:连接超过5或10秒的代理对我来说毫无用处,这就是我使用这些值的原因。
答案 2 :(得分:0)
是。如果您的目标是查询其他站点的代理,那么这样的级联连接将需要相当长的时间段来执行curl调用。
特别是遇到间歇性卷曲问题时,请先检查这些值。
答案 3 :(得分:0)
如果你设置得太高,那么你的脚本会很慢,因为一个关闭的网址将花费你在CURLOPT_TIMEOUT中设置的所有时间来完成处理。如果您不使用代理,则可以设置以下值
CURLOPT_TIMEOUT = 3 CURLOPT_CONNECTTIMEOUT = 1
然后你可以在以后通过失败的网址来仔细检查它们。
答案 4 :(得分:-1)
我用
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30); curl_setopt($ch, CURLOPT_TIMEOUT,60);