通过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 一个随机字符串生成代码
May 26 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
php判断IP地址是否在多个IP段内
Aug 18 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中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php实现的通用图片处理类
2015/03/24 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
Android分包MultiDex策略详解
2017/10/30 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python中SQLite如何使用
2020/05/27 Python
python 读取.nii格式图像实例
2020/07/01 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
教师专业理论水平的自我评价分享
2013/11/09 职场文书
2014政务公开实施方案
2014/02/19 职场文书
新文化运动的基本口号
2014/06/21 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
文案策划岗位职责
2015/02/11 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
工程技术员岗位职责
2015/04/11 职场文书
详解MySQL的半同步
2021/04/22 MySQL
golang 实现对Map进行键值自定义排序
2021/04/28 Golang