通过curl模拟post和get方式提交的表单类_php实例

最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过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);
 }
}

时间: 2024-09-18 10:04:37

通过curl模拟post和get方式提交的表单类_php实例的相关文章

Jquery通过Ajax方式来提交Form表单的具体实现_jquery

今天刚好看到Jquery的ajax提交数据到服务器的方法,原文是: 保存数据到服务器,成功时显示信息. jQuery 代码: 复制代码 代码如下: $.ajax({ type: "POST", url: "some.php", data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); } }); 后

php实现跨域提交form表单的方法【2种方法】_php技巧

本文实例讲述了php实现跨域提交form表单的方法.分享给大家供大家参考,具体如下: 有时我们为了网站安全考虑,我们不允许直接跨域提交form表单数据,如果我们自己有这个需求呢?下面我们来介绍两种跨域的方法解决直接跨域问题. 下面我们来看看两种php跨域提交form的方法 一.通过php curl function curlPost($url,$params) { $postData = ''; foreach($params as $k => $v) { $postData .= $k . '

jquery实现ajax提交form表单的方法总结

 本篇文章主要是对jquery实现ajax提交form表单的方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 方法一:     代码如下: function AddHandlingFeeToRefund()           {             var AjaxURL= "../OrderManagement/AjaxModifyOrderService.aspx";                    alert($('#formAddHandlingFe

http-java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别

问题描述 java中PostMethod和HttpPost都可以提交post表单,请问他们有什么区别 PostMethod HttpPost 尤其是在cookie和保存信息方面有什么不同?求大神解释 我抛砖引玉,上代码! import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream

bootstap的分页,可以在其中提交一个表单吗

问题描述 bootstap的分页,可以在其中提交一个表单吗 页面使用bootstrap分页,当我点击下一页的时候,我不想在地址栏显示传递的参数 而是希望通过表单的方式传递. 希望达到地址栏没有参数出现. 解决方案 get 换成post 就可以了 解决方案二: post submit url上是不会有参数的. 解决方案三: 一般通常是用的a标签进行分页,你只要不展示敏感字段就可以,或者你把a标签改成form然后,post方式提交即可.

提交form表单如何让页面在提交后不发生跳转

问题描述 提交form表单如何让页面在提交后不发生跳转希望有详细的示例 解决方案 解决方案二:用AJAX无刷新跳转.$.post("跳转URL"),{Action:"POST",Name:"useradress"},function(data,textStatus){data是返回值,返回NULL就行.这里可以不用写,后台的URL跳转中returnnull:就行})解决方案三:不想跳转就让action执行完后,再指向回来提交的这个页面就行了解决方

js-ajax实现页面无跳转提交form表单

问题描述 ajax实现页面无跳转提交form表单 我没有做过ajax,不懂js跟jq,想实现一个输入框输入,然后提交添加,ajax怎么实现页面无跳转,显示添加成功呢,求贴测试好的代码,写好尽量讲解下 解决方案 function tijiao(){ var formParam = $("#我是form的id").serialize();//序列化表格内容为字符串 $.ajax({ type:'post', //提交方式 url:'我是提交地址', data:formParam,//提交的

基于jQuery通过jQuery.form.js插件使用ajax提交form表单_javascript技巧

我们在提交表单的时候,如果没有使用ajax提交,页面都会自己刷新一下,显得非常的不友好,所以我们需要把我们的表单提交修改为ajax的模式,可以让用户清楚地知道他们在提交表单的时候处在哪一个阶段:正在提交?提交成功? 我简单使用了一下,jQuery Form插件有一下优点: 1.支持提交前验证. 2.支持提交后回调. 3.采用AJAX方式,有很好的用户体验 4.提交方式是灵活.只要指定要提交的form ID即可.想提交那个form.就可提交那个.同时提交参数可配置. 5.支持提交多种类型数据.如:

AJAX PHP无刷新form表单提交的简单实现(推荐)_php实例

ajax.php: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <script language="javascript"> function saveUserInfo() { //获取