Maison >développement back-end >tutoriel php >关于用file()读取url的疑问
<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压缩的