最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过curl的方式模拟表单提交。可以通过数组和字符串两种方式提交数据。
- /**
- * 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的编辑功能实在是太残了!
- }
- }
复制代码
|