解决php无法通过file_get_contents或curl采集页面内容

优采云 发布时间: 2020-08-09 02:46

  要从工作中的某些网页采集数据,php中常用的采集功能是file_get_contents和curl函数. 当php使用file_get_contents函数采集网站时,有时可以使用浏览器对其进行查看,但是却无法采集任何内容.

  我遇到了这样的问题. 但是,我要采集的页面无法获取数据. 经过测试,正常获取百度,新浪,网易等页面的内容. 这个问题让我感到困惑,所以我找到了一个朋友来尝试一下. 他通过file_get_contents和curl函数获取它是正常的. 我很沮丧,然后我意识到他正在使用Nginx Web服务器,而我的服务器是apache服务器.

  通过连续测试和搜索信息,结果发现这是PHP用户代理的问题. 这很可能是服务器上的一项设置,因为php $ _SERVER [“ HTTP_USER_AGENT”]获取User_agent以确定它是否是正常的浏览器请求,因为默认的php file_get_contents函数不会发送ua.

  让我们了解什么是用户代理. 用户代理的中文名称是用户代理,简称UA. 它是一个特殊的字符串头,使服务器可以识别操作系统和版本,CPU类型,浏览器和版本,浏览器渲染引擎,浏览器语言,浏览器插件等.

  我通过了测试,要爬网的页面上的输出变量$ _SERVER [“ HTTP_USER_AGENT”]为空. 这样,通过爬网服务器上的php获得$ _SERVER [“ HTTP_USER_AGENT”]的值. 如果为空,则会跳至404错误页面,因此无法捕获页面信息.

  让我们谈谈上述朋友的nginx服务器可以采集的原因,估计在编译nginx时UA代理已打开. 您可以对此进行测试.

  有两种方法可以解决此问题

  1. 设置php.ini配置文件,找到user_agent,然后删除分号;

  2. 通过php的ini_set()方法设置用户代理.

  示例如下

  ini_set('user_agent','Mozilla / 4.0(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');

  echo file_get_contents(“您要采集的页面的网址”);

  通过使用以上两种方法,可以使$ _SERVER [“ HTTP_USER_AGENT”]的值不为空,并且可以成功采集所需的内容.

  注意: 设置user_agent时,最好使用浏览器版本或Spider,就像我在上面设置的版本是Firefox一样,这样采集的服务器将正常通过身份验证. 因为服务器不会阻止Spider或浏览器的版本,所以您应该注意这个问题,哈哈. 如果他阻止了此操作,则将阻止蜘蛛抓取页面,并且将无法识别用户使用的浏览器.

  来源: //是否无法设置http标头信息标头?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线