php - 关于用file()读取url的疑问
天蓬老师
天蓬老师 2017-04-10 15:13:42
0
1
444
$buffer = file("http://www.sina.com.cn"); for($i=0;$i

读取新浪没问题,
但是读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
读搜狐就全是乱码
这是怎么回事?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all (1)
伊谢尔伦

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

GET / HTTP/1.0 HOST: www.douban.com

而浏览器发出的是这样的

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

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

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

但是读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压缩的

    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!