通过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 相关文章推荐
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
Feb 14 PHP
对laravel in 查询的使用方法详解
Oct 09 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
php实现cookie加密的方法
2015/03/10 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python逆序打印各位数字的方法
2018/06/25 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
高中毕业自我鉴定
2013/12/22 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
预备党员转正材料
2014/12/19 职场文书
市场营销计划书范文
2015/01/16 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书