通过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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
php学习笔记之 函数声明
Jun 09 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
基于laravel where的高级使用方法
Oct 10 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
Vue.js进阶知识点总结
2018/04/01 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
开源Web应用框架Django图文教程
2017/03/09 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
药剂学专业应届生自荐信
2013/09/29 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
趣味运动会策划方案
2014/06/02 职场文书
埃及王子观后感
2015/06/16 职场文书
初中同学会致辞
2015/08/01 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS