微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过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,strlen($result_string) - 1);
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐