通过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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
聊天室php&amp;mysql(一)
Oct 09 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
php去除重复字的实现代码
Sep 16 PHP
国外PHP程序员的13个好习惯小结
Feb 20 PHP
怎么在Windows系统中搭建php环境
Aug 31 PHP
使用php-timeit估计php函数的执行时间
Sep 06 PHP
php文件上传类的分享
Jul 06 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
浅谈PHP7中的一些小技巧
May 29 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下对字符串的递增运算代码
2010/08/21 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
深入浅析javascript继承体系
2017/10/23 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
python实现微信远程控制电脑
2018/02/22 Python
详解django三种文件下载方式
2018/04/06 Python
python中的for循环
2018/09/28 Python
python实现定时发送qq消息
2019/01/18 Python
NumPy 数组使用大全
2019/04/25 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
数据库基础的一些面试题
2012/02/25 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
歌剧魅影观后感
2015/06/05 职场文书
旷工检讨书大全
2015/08/15 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
MySQL 数据类型详情
2021/11/11 MySQL