远程抓取的问题.急,请帮忙!

logccve 2008-11-22 09:35:08
在本机测试一切正常.
不管是用file_get_contents还是fsockopen都可以用,但传到服务器上
就非常频繁的出现failed to open stream: HTTP request failed!
这是什么原因呢?我查了一下有人说是DNS有时解析错误造成的,但我又改为了用访问IP地址的抓取,但还是出问题,刷几次,才能有一次成功.
是服务器配置问题?请高手指教!
...全文
225 点赞 收藏 34
写回复
34 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
an9ryfr09 2008-11-24
感觉可能是由于访问超时造成的。

你还是用curl吧,可以加个http头来设置超时时间,把超时时间加长一些,默认是10秒
回复
fxs_2008 2008-11-23
一种是IP被封
另一种是可能是跨域了,对方跳转了

看看出错的url,放在iE中测一下就行了
如果IE能打开,且地址不变,则说明没问题
回复
phpboy 2008-11-23
应该不会是IP被封了吧
有可能是服务器设置的远程访问受一些限制
或者是楼主在设置连接时一些参数可能设置错了...
回复
iasky 2008-11-23
最大的可能:服务器的配置和你本地的不一样

也许不支持打开外部地址,也许你的服务器的IP被对方封了
回复
phpboy 2008-11-23
你在apache的http.conf里面找找看,具体怎么设置的我也不太清楚,我只知道在IIS里可以设置!
默认的响应时间可能是 90s
回复
logccve 2008-11-23
php5+apache2+mysql
回复
logccve 2008-11-23
windows 2003

我感觉就是响应时间过快.
回复
phpboy 2008-11-23
是什么服务器?
回复
logccve 2008-11-23
[Quote=引用 12 楼 phpBoy005 的回复:]
是不是服务器响应时间设置的太短导致?
如果服务器反应慢的话,在连接时可能是由于超时导致failed to open stream: HTTP request failed!
[/Quote]
我也想到了这个问题.
在哪里设置响应时间?
回复
phpboy 2008-11-23
是不是服务器响应时间设置的太短导致?
如果服务器反应慢的话,在连接时可能是由于超时导致failed to open stream: HTTP request failed!
回复
onlythree 2008-11-23
fsockopen 和 file_get_contents 都不是太可靠,你可以试一下curl,相比之下,更好用。
回复
logccve 2008-11-23
allow_url_fopen = On

没问题的.
现在就是用 file_get_contents 或 fsockopen 都是10次里会有几次好使.
怪就怪在不是不好使,是有时好时,但出现failed to open stream: HTTP request failed! 提示的时候还是多数...
回复
fxs_2008 2008-11-23
提示: 如果“fopen wrappers”已经被激活,则在本函数中可以把 URL 作为文件名来使用。请参阅 fopen() 函数来获取怎样指定文件名的详细信息以及支持 URL 封装协议的列表:附录 L。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。


设置php.ini中的
allow_url_fopen
回复
fxs_2008 2008-11-23
可能是你的远程服务器没有打开那个远程获取命令
即支持获取远程url的

和服务商联系一下!
回复
logccve 2008-11-23
顶上去.
回复
logccve 2008-11-23
[Quote=引用 32 楼 dada20042030 的回复:]
你获取的页面有禁止某些东西的~
[/Quote]

不是这个问题.
回复
剑心永远OK 2008-11-23
你获取的页面有禁止某些东西的~
回复
logccve 2008-11-23
这样,用 file_get_contents 如果抓到内容他会返回一个 true, 抓不到 他会返回一个 false

这样写现在抓取的话,可以显示正常的抓取内容:
for($i=0;$i <100;$i++){
$getpage = @file_get_contents($Url);
if($getpage) break;
}

如果只写 $getpage = file_get_contents($Url);
出现failed to open stream: HTTP request failed! 的机率很高,但有时也能正常抓取.
回复
fxs_2008 2008-11-23
那你加上后没有用,那只是不显示出错信息,但错误仍在,跳不过去
回复
jiang_jiajia10 2008-11-23
[Quote=引用 9 楼 fxs_2008 的回复:]
提示: 如果“fopen wrappers”已经被激活,则在本函数中可以把 URL 作为文件名来使用。请参阅 fopen() 函数来获取怎样指定文件名的详细信息以及支持 URL 封装协议的列表:附录 L。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。


设置php.ini中的
allow_url_fopen
[/Quote]
UP
回复
加载更多回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2008-11-22 09:35
社区公告
暂无公告