当前位置:首页 > PHP教程 > php高级应用 > 列表

php的curl携带header请求头信息实现http访问的方法

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-08 09:25:09 浏览: 评论:0 

这篇文章主要介绍了php的curl携带header请求头信息实现http访问的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。

导读:

curl请求时添加请求头信息可以模拟真人操作,不容易被当成是爬虫机器人(采集),从而可以绕过Incapsula等安全验证机制。

1、首先使用浏览器(示例使用的是火狐浏览器)访问接口网址,使用F12调试,查看请求头信息,如下:

php的curl携带header请求头信息实现http访问的方法

2、实现代码:

  1. <?php 
  2. /** 
  3.  * 开始访问请求 
  4.  * @param $url 
  5.  * @return bool|string 
  6.  */ 
  7. function fetch_url($url) { 
  8.     $header = FormatHeader($url); 
  9.     $useragent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'
  10.     $timeout= 120; 
  11.     $ch = curl_init($url); 
  12.     curl_setopt($ch, CURLOPT_FAILONERROR, true); 
  13.     //设置请求头信息 
  14.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  15.     //不取得返回头信息   
  16.     curl_setopt($ch, CURLOPT_HEADER, 0); 
  17.     // 关闭https验证 
  18.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
  19.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
  20.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true ); 
  21.     curl_setopt($ch, CURLOPT_ENCODING, "" ); 
  22.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); 
  23.     curl_setopt($ch, CURLOPT_AUTOREFERER, true ); 
  24.     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout ); 
  25.     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ); 
  26.     curl_setopt($ch, CURLOPT_MAXREDIRS, 10 ); 
  27.     curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
  28.     $content = curl_exec($ch); 
  29.     if(curl_errno($ch)) 
  30.     { 
  31.         echo 'Error:' . curl_error($ch); 
  32.     } 
  33.     else 
  34.     { 
  35.         return $content;     
  36.     } 
  37.     curl_close($ch); 
  38.    
  39. //添加请求头 
  40. function FormatHeader($url
  41.  // 解析url 
  42.  $temp = parse_url($url); 
  43.  $query = isset($temp['query']) ? $temp['query'] : '';  
  44.  $path = isset($temp['path']) ? $temp['path'] : '/';  
  45.  $header = array ( 
  46.  "POST {$path}?{$query} HTTP/1.1"
  47.  "Host: {$temp['host']}"
  48.  "Referer: http://{$temp['host']}/"
  49.  "Content-Type: text/xml; charset=utf-8"
  50.  'Accept: application/json, text/javascript, */*; q=0.01'
  51.  'Accept-Encoding:gzip, deflate, br'
  52.  'Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'
  53.  'Connection:keep-alive'
  54.  'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0'
  55.  'X-Requested-With: XMLHttpRequest'
  56.  ); 
  57.  return $header
  58. ?> 

3、调用示例:

  1. <?php 
  2. //lcg_value() 返回范围为 (0, 1) 的一个伪随机数 
  3. $url="http://www.xxx.com/getdata.php?v=".lcg_value(); 
  4. //访问网址 
  5. $html = fetch_url($url);

Tags: curl header请求头信息

分享到: