Home >Backend Development >PHP Tutorial >关于用file()读取url的疑问

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

WBOY
WBOYOriginal
2016-06-06 20:39:561266browse

<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压缩的

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn