龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

一个模拟的表单类,可以模拟post和get方式提交。

时间:2014-07-22 14:48来源: 作者: 点击:
分享到:
最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过curl的方式模拟表单提交。可以通过数组和字符串两种方式提交数据。
最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过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) {
		return '?' . http_build_query($_get_data);  //参考一楼,换成了http_build_query函数,另外oschina的编辑功能实在是太残了!
	}
}
精彩图集

赞助商链接