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

通过curl模拟post和get方式提交的表单类

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-19 15:31:29 浏览: 评论:0 

写了个简单的脚本通过curl的方式模拟表单提交。可以通过数组和字符串两种方式提交数据,需要的朋友可以参考下。

最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过curl的方式模拟表单提交。可以通过数组和字符串两种方式提交数据,代码如下:

  1. <?php 
  2. /** 
  3.  * Class SimulantForm 模拟表单 
  4.  */ 
  5. class SimulantForm { 
  6.     /** 
  7.      * @var 要提交的页面url 
  8.      */ 
  9.     protected $_url
  10.  
  11.     /** 
  12.      * @var resource curl_init()返回的curl句柄 
  13.      */ 
  14.     protected $_ch
  15.  
  16.     /** 
  17.      * 初始化一个表单 
  18.      * @param $_url url 
  19.      */ 
  20.     public function __construct($_url) { 
  21.   $this->_ch = curl_init(); 
  22.   $this->setUrl($_url); 
  23.   curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, 1); 
  24.  } 
  25.  
  26.     /** 
  27.      * get方式提交 
  28.      * @param array|string 表单数据 
  29.      * @return mixed 
  30.      */ 
  31.     public function get($_data = '') {  
  32.   $this->_url .= $this->_setGetData($_data); 
  33.   $this->setUrl($this->_url); 
  34.   $result = curl_exec($this->_ch); 
  35.         curl_close($this->_ch); 
  36.         return $result
  37.  } 
  38.  
  39.     /** 
  40.      * post方式提交 
  41.      * @param array|string 表单数据 
  42.      * @return mixed 
  43.      */ 
  44.     public function post($_data) { 
  45.   curl_setopt($this->ch, CURLOPT_POST, 1); 
  46.   $this->_setPostData($_data); 
  47.   $result = curl_exec($this->_ch); 
  48.         curl_close($this->_ch); 
  49.         return $result
  50.  } 
  51.  
  52.     /** 
  53.      * 返回错误信息 
  54.      * @return array array[0]:错误号 , array[1]:错误信息 
  55.      */ 
  56.     public function getLastError() { 
  57.   return array(curl_errno($this->_ch), curl_error($this->_ch)); 
  58.  } 
  59.  
  60.  /** 
  61.   * 设置SETOPT_COOKIEFILE 
  62.   * @param string $_cookieFile 文件真实路径 
  63.   */ 
  64.  public function setCookieFile($_cookieFile) { 
  65.   curl_setopt($this->_ch, CURLOPT_COOKIEFILE, $_cookieFile); 
  66.  } 
  67.  
  68.  /** 
  69.   * 设置SETOPT_COOKIEJAR 
  70.   * @param string $_cookieFile 文件真实路径 
  71.   */ 
  72.     public function setCookieJar($_cookieFile) { 
  73.         curl_setopt($this->_ch, CURLOPT_COOKIEJAR, $_cookieFile); 
  74.     } 
  75.  
  76.  /** 
  77.      * 设置url 
  78.      * @param $_url 
  79.      */ 
  80.     protected function setUrl($_url) { 
  81.   $this->_url = $_url
  82.   curl_setopt($this->_ch, CURLOPT_URL, $_url); 
  83.  } 
  84.  
  85.     /** 
  86.      * 设置get方式提交时的数据 
  87.      * @param $_get_data 字符串或数组 
  88.      * @return mixed 
  89.      */ 
  90.     protected function _setGetData($_get_data) { 
  91.         if(is_array($_get_data)) { 
  92.            return $this->_getDataToString($_get_data); 
  93.         } elseif(is_string($_get_data)) { 
  94.            return $_get_data
  95.         } 
  96.     } 
  97.  
  98.     /** 
  99.      * 设置post方式提交时的数据 
  100.      * @param array|string $_post_data 
  101.      */ 
  102.     protected function _setPostData ($_post_data) { 
  103.         curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $_post_data); 
  104.     } 
  105.  
  106.     /** 
  107.      * 将提交的数组形式的信息解析为字符串用于get方式提交 
  108.      * @param array $_get_data 
  109.      * @return string 
  110.      */ 
  111.     protected function _getDataToString(array $_get_data) { 
  112.   $result_string = '?'
  113.   array_walk($_get_datafunction ($value$keyuse (&$result_string) { 
  114.    if(is_array($value)) { 
  115.     foreach($value as $sec_value) { 
  116.      $result_string .= $key . '[]=' . $sec_value . '&'
  117.     } //phpfensi.com 
  118.    } else { 
  119.     $result_string .= $key . '=' . $value . '&'
  120.    } 
  121.   }); 
  122.   return substr($result_string, 0, strlen($result_string) - 1); 
  123.  } 

Tags: curl post get

分享到: