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

2015-01-24信息快讯网

写了个简单的脚本通过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) { $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); } }

©2014-2024 dbsqp.com