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

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

  

复制代码 代码如下:

  <?php

  /**

  * Class SimulantForm 模拟表单

  */

  class SimulantForm {

  /**

  * @var 要提交的页面url

  */

  protected $_url;

  /**

  * @var resource curl_init()返回的curl句柄

  */

  protected $_ch;

  /**

  * 初始化一个表单

  * @param $_url url

  */

  public function __construct($_url) {

  $this->_ch = curl_init();

  $this->setUrl($_url);

  curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, 1);

  }

  /**

  * get方式提交

  * @param array|string 表单数据

  * @return mixed

  */

  public function get($_data = '') {

  $this->_url .= $this->_setGetData($_data);

  $this->setUrl($this->_url);

  $result = curl_exec($this->_ch);

  curl_close($this->_ch);

  return $result;

  }

  /**

  * post方式提交

  * @param array|string 表单数据

  * @return mixed

  */

  public function post($_data) {

  curl_setopt($this->ch, CURLOPT_POST, 1);

  $this->_setPostData($_data);

  $result = curl_exec($this->_ch);

  curl_close($this->_ch);

  return $result;

  }

  /**

  * 返回错误信息

  * @return array array[0]:错误号 , array[1]:错误信息

  */

  public function getLastError() {

  return array(curl_errno($this->_ch), curl_error($this->_ch));

  }

  /**

  * 设置SETOPT_COOKIEFILE

  * @param string $_cookieFile 文件真实路径

  */

  public function setCookieFile($_cookieFile) {

  curl_setopt($this->_ch, CURLOPT_COOKIEFILE, $_cookieFile);

  }

  /**

  * 设置SETOPT_COOKIEJAR

  * @param string $_cookieFile 文件真实路径

  */

  public function setCookieJar($_cookieFile) {

  curl_setopt($this->_ch, CURLOPT_COOKIEJAR, $_cookieFile);

  }

  /**

  * 设置url

  * @param $_url

  */

  protected function setUrl($_url) {

  $this->_url = $_url;

  curl_setopt($this->_ch, CURLOPT_URL, $_url);

  }

  /**

  * 设置get方式提交时的数据

  * @param $_get_data 字符串或数组

  * @return mixed

  */

  protected function _setGetData($_get_data) {

  if(is_array($_get_data)) {

  return $this->_getDataToString($_get_data);

  } elseif(is_string($_get_data)) {

  return $_get_data;

  }

  }

  /**

  * 设置post方式提交时的数据

  * @param array|string $_post_data

  */

  protected function _setPostData ($_post_data) {

  curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $_post_data);

  }

  /**

  * 将提交的数组形式的信息解析为字符串用于get方式提交

  * @param array $_get_data

  * @return string

  */

  protected function _getDataToString(array $_get_data) {

  $result_string = '?';

  array_walk($_get_data, function ($value, $key) use (&$result_string) {

  if(is_array($value)) {

  foreach($value as $sec_value) {

  $result_string .= $key . '[]=' . $sec_value . '&';

  }

  } else {

  $result_string .= $key . '=' . $value . '&';

  }

  });

  return substr($result_string, 0, strlen($result_string) - 1);

  }

  }