通过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 删除无限级目录与文件代码共享
Nov 22 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
php中ob_get_length缓冲与获取缓冲长度实例
Nov 20 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP实现微信对账单处理
Oct 01 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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
php数组指针操作详解
2017/02/14 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
简单实现php上传文件功能
2017/09/21 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
用js的for循环获取radio选中的值
2013/10/21 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
百度地图api如何使用
2015/08/03 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
zTree节点文字过多的处理方法
2017/11/24 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
使用python制作一个解压缩软件
2019/11/13 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
4s店销售经理岗位职责
2014/07/19 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
护士实习自荐信
2015/03/06 职场文书
卫生主题班会
2015/08/14 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
python获取带有返回值的多线程
2022/05/02 Python
Nginx跨域问题解析与解决
2022/08/05 Servers