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

最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过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) {
$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,strlen($result_string) - 1);
}
}

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...