天空小小岛技术论坛

 找回密码
 注册
搜索
查看: 15008|回复: 9
打印 上一主题 下一主题

[总结] 解决 Snoopy.class.php 模拟请求时很慢的问题

[复制链接]
跳转到指定楼层
1#
一粒米 发表于 2012-4-17 14:04:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Snoopy.class.php 是一个 php 的类,用来模仿 web 浏览器的功能,它能完成获取网页内容和发送表单的任务。
官方网站 http://snoopy.sourceforge.net/
最新版本:1.2.4


一哥们使用 Snoopy.class.php 抓取普通门户网站首页时,居然耗时二十多秒,问我怎么回事儿。

采用单点取时,发现
  1. do {
  2.                     $_data = fread($fp, $this->maxlength);
  3.                     if (strlen($_data) == 0) {
  4.                         break;
  5.                     }
  6.                     $results .= $_data;
  7.                 } while(true);
复制代码
这段代码前后耗时就二十多秒。
循环中间插入取时,发现最后一次时间最长。
于是想,循环中每次耗时都比较短,为啥单单最后一次那么长时间呢?
难道是无法判断到文件结束自然超时?

于是做了以下调整:
找到第836行,上下的代码是
  1. //add proxy auth headers
  2.                 if(!empty($this->proxy_user))       
  3.                         $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n";


  4.                 $headers .= "\r\n";
复制代码
  1. $headers .= "\r\n";
复制代码
上面增加

  1.                 // Arice start
  2.                 if($http_method != $this->_submit_method) {
  3.                         $headers .= "Connection: Close\r\n";
  4.                 }
  5.                 // Arice end
复制代码
注意
  1. $headers .= "\r\n";
复制代码
这个有好几处,只有一处是结尾的。

经过这样修改后,抓取时间一下子变成 0.4 秒
2#
 发表于 2012-4-17 15:44:32
3#
 发表于 2012-4-17 15:44:33
保存一下先,有用 || @shengshuai: 牛人

来自 黎明 的腾讯微博
4#
 发表于 2012-4-17 15:44:34
支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 御雪 的腾讯微博
5#
 发表于 2012-4-17 15:44:35
必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 胡桔森 的腾讯微博
6#
 发表于 2012-4-17 15:44:36
收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 猫小乐 的腾讯微博
7#
 发表于 2012-4-17 15:44:37
|| @politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 临平百合新娘小涛 的腾讯微博
8#
 发表于 2012-4-17 15:44:38
|| @politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 WEI 的腾讯微博
9#
 发表于 2012-4-17 17:01:46
|| @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 张建勇 的腾讯微博
10#
 发表于 2012-4-17 17:56:44
||@politebogle: 收藏了 || @zoewho: 必须mark一下 || @max_soft: 支持一下/强||@huangliming816: 保存一下先,有用 || @shengshuai: 牛人

来自 陈杰 的腾讯微博
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|天空小小岛  |京ICP备2025130156号|

GMT+8, 2025-6-21 19:07 , Processed in 0.098928 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表