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

logccve 2008-11-22 09:35:08
在本机测试一切正常.
不管是用file_get_contents还是fsockopen都可以用,但传到服务器上
就非常频繁的出现failed to open stream: HTTP request failed!
这是什么原因呢?我查了一下有人说是DNS有时解析错误造成的,但我又改为了用访问IP地址的抓取,但还是出问题,刷几次,才能有一次成功.
是服务器配置问题?请高手指教!
...全文
278 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
加载更多回复(14)

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧