首页  >  文章  >  后端开发  >  关于用file()读取url的疑问

关于用file()读取url的疑问

WBOY
WBOY原创
2016-06-06 20:39:561237浏览

<code> $buffer = file("http://www.sina.com.cn");
  for($i=0;$i<sizeof echo></sizeof></code>

读取新浪没问题,
但是读163的话,就提示:
因为您的ISP供应商并没有遵循标准的互联网协议,我们对您的访问作出限制,敬请谅解。 您可以通过以下链接继续访问 www.163.com
而读取豆瓣,就报warning:
Warning: file(http://www.douban.com) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in C:\wamp\www\1\1.php on line 25
读搜狐就全是乱码
这是怎么回事?

回复内容:

<code> $buffer = file("http://www.sina.com.cn");
  for($i=0;$i<sizeof echo></sizeof></code>

读取新浪没问题,
但是读163的话,就提示:
因为您的ISP供应商并没有遵循标准的互联网协议,我们对您的访问作出限制,敬请谅解。 您可以通过以下链接继续访问 www.163.com
而读取豆瓣,就报warning:
Warning: file(http://www.douban.com) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in C:\wamp\www\1\1.php on line 25
读搜狐就全是乱码
这是怎么回事?

使用PHPfile函数发出的 HTTP请求是这样的

<code>GET / HTTP/1.0
HOST: www.douban.com
</code>

而浏览器发出的是这样的

<code>GET / HTTP/1.1
Host: www.douban.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: xxxxxxxxxxxxxxxxxx
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
</code>

这样题主能否理解呢(主要关注第一行的差异即可)?

如果还是不理解,请继续看

但是读163的话,就提示: 因为您的ISP供应商并没有遵循标准的互联网协议,我们对您的访问作出限制,敬请谅解。 您可以通过以下链接继续访问
www.163.com

163不支持 HTTP/1.0协议,但它的服务器配置了接受HTTP/1.0的请求,当你使用HTTP 1.0协议访问,会被302跳转到http://www.163.com/special/0077jt/error_isp.html,也就是显示上述文本的错误页面

而读取豆瓣,就报warning: Warning: file(http://www.douban.com) [function.file]:
failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in
C:\wamp\www\1\1.php on line 25

同样,豆瓣不支持HTTP/1.0,对待HTTP/1.0请求更暴力,直接拒绝(403),因为它的服务器没有配置启用HTTP1.0

读搜狐就全是乱码

因为sohu的首页,是默认gzip压缩的

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn