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


Posted in PHP onApril 23, 2014

最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过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);
 }
}
PHP 相关文章推荐
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
深入PHP数据加密详解
Jun 18 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
php生成html文件方法总结
Dec 01 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
设定php简写功能的方法
Nov 28 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 #PHP
php自定义session示例分享
Apr 22 #PHP
php cli换行示例
Apr 22 #PHP
php使用百度天气接口示例
Apr 22 #PHP
phpmailer中文乱码问题的解决方法
Apr 22 #PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 #PHP
自己写了一个php检测文件编码的函数
Apr 21 #PHP
You might like
mysql+php分页类(已测)
2008/03/31 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
JPA的优势都有哪些
2013/07/04 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
运动会广播稿150字
2014/02/19 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
小学数学课题方案
2014/06/15 职场文书
计划生育诚信协议书
2014/11/02 职场文书
打架检讨书
2015/01/27 职场文书
天下第一关导游词
2015/02/06 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
《比的意义》教学反思
2016/02/18 职场文书
2019秋季运动会口号
2019/06/25 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python