通过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 相关文章推荐
3.从实例开始
Oct 09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
基于empty函数的输出详解
Jun 17 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
twig模板常用语句实例小结
Feb 04 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 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 print EOF实现方法
2009/05/21 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
vue中activated的用法
2021/01/03 Vue.js
python BeautifulSoup使用方法详解
2013/11/21 Python
Python计算回文数的方法
2015/03/11 Python
python学习数据结构实例代码
2015/05/11 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
Python输出指定字符串的方法
2020/02/06 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
2014年端午节活动方案
2014/03/11 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
设计专业自荐信
2014/06/19 职场文书
如何写好活动总结
2019/06/21 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python