天空小小岛技术网站
标题:
解决 Snoopy.class.php 模拟请求时很慢的问题
[打印本页]
作者:
一粒米
时间:
2012-4-17 14:04
标题:
解决 Snoopy.class.php 模拟请求时很慢的问题
Snoopy.class.php 是一个 php 的类,用来模仿 web 浏览器的功能,它能完成获取网页内容和发送表单的任务。
官方网站
http://snoopy.sourceforge.net/
最新版本:1.2.4
一哥们使用 Snoopy.class.php 抓取普通门户网站首页时,居然耗时二十多秒,问我怎么回事儿。
采用单点取时,发现
do {
$_data = fread($fp, $this->maxlength);
if (strlen($_data) == 0) {
break;
}
$results .= $_data;
} while(true);
复制代码
这段代码前后耗时就二十多秒。
循环中间插入取时,发现最后一次时间最长。
于是想,循环中每次耗时都比较短,为啥单单最后一次那么长时间呢?
难道是无法判断到文件结束自然超时?
于是做了以下调整:
找到第836行,上下的代码是
//add proxy auth headers
if(!empty($this->proxy_user))
$headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n";
$headers .= "\r\n";
复制代码
在
$headers .= "\r\n";
复制代码
上面增加
// Arice start
if($http_method != $this->_submit_method) {
$headers .= "Connection: Close\r\n";
}
// Arice end
复制代码
注意
$headers .= "\r\n";
复制代码
这个有好几处,只有一处是结尾的。
经过这样修改后,抓取时间一下子变成 0.4 秒
作者:
匿名
时间:
2012-4-17 15:44
牛人
来自 范圣帅 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
保存一下先,有用 || @shengshuai: 牛人
来自 黎明 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 御雪 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 胡桔森 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 猫小乐 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
|| @politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 临平百合新娘小涛 的腾讯微博
作者:
匿名
时间:
2012-4-17 15:44
|| @politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 WEI 的腾讯微博
作者:
匿名
时间:
2012-4-17 17:01
|| @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 张建勇 的腾讯微博
作者:
匿名
时间:
2012-4-17 17:56
||@politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人
来自 陈杰 的腾讯微博
欢迎光临 天空小小岛技术网站 (http://tkxxd.net/)
Powered by Discuz! X3.1