通过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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
php自动获取关键字的方法
Jan 06 PHP
PHP闭包函数详解
Feb 13 PHP
PHP6新特性分析
Mar 03 PHP
微信支付开发告警通知实例
Jul 12 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP常量define和const的区别详解
May 18 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
PHP7.3.10编译安装教程
Oct 08 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
php中addslashes函数与sql防注入
2014/11/17 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
JavaScript 程序编码规范
2010/11/23 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python类装饰器用法实例
2015/06/04 Python
Python分支结构(switch)操作简介
2018/01/17 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
会话Bean的种类
2013/11/07 面试题
资深生产主管自我评价
2013/09/22 职场文书
建筑设计师岗位职责
2013/11/18 职场文书
大学生创业策划书
2014/02/02 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
双语教学实施方案
2014/03/23 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
爱心捐款感谢信
2015/01/20 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
升学宴家长致辞
2015/07/27 职场文书