i漂泊

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4102|回复: 0

一个模拟的表单类,可以模拟post和get方式提交

[复制链接]
TA的礼物信息
  • 收到:0
  • 送出:2
发表于 2014-5-5 16:47:15 | 显示全部楼层 |阅读模式
  1. <?php

  2. /**
  3. * Class SimulantForm 模拟表单
  4. */
  5. class SimulantForm {
  6.     /**
  7.      * @var 要提交的页面url
  8.      */
  9.     protected $_url;

  10.     /**
  11.      * @var resource curl_init()返回的curl句柄
  12.      */
  13.     protected $_ch;

  14.     /**
  15.      * 初始化一个表单
  16.      * @param $_url url
  17.      */
  18.     public function __construct($_url) {
  19.                 $this->_ch = curl_init();
  20.                 $this->setUrl($_url);
  21.                 curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, 1);
  22.         }

  23.     /**
  24.      * get方式提交
  25.      * @param array|string 表单数据
  26.      * @return mixed
  27.      */
  28.     public function get($_data = '') {       
  29.                 $this->_url .= $this->_setGetData($_data);
  30.                 $this->setUrl($this->_url);
  31.                 $result = curl_exec($this->_ch);
  32.         curl_close($this->_ch);
  33.         return $result;
  34.         }

  35.     /**
  36.      * post方式提交
  37.      * @param array|string 表单数据
  38.      * @return mixed
  39.      */
  40.     public function post($_data) {
  41.                 curl_setopt($this->_ch, CURLOPT_POST, 1);
  42.                 $this->_setPostData($_data);
  43.                 $result = curl_exec($this->_ch);
  44.         curl_close($this->_ch);
  45.         return $result;
  46.         }

  47.     /**
  48.      * 返回错误信息
  49.      * @return array array[0]:错误号 , array[1]:错误信息
  50.      */
  51.     public function getLastError() {
  52.                 return array(curl_errno($this->_ch), curl_error($this->_ch));
  53.         }
  54.        
  55.         /**
  56.          * 设置SETOPT_COOKIEFILE
  57.          * @param string $_cookieFile 文件真实路径
  58.          */
  59.         public function setCookieFile($_cookieFile) {
  60.                 curl_setopt($this->_ch, CURLOPT_COOKIEFILE, $_cookieFile);
  61.         }
  62.        
  63.         /**
  64.          * 设置SETOPT_COOKIEJAR
  65.          * @param string $_cookieFile 文件真实路径
  66.          */
  67.     public function setCookieJar($_cookieFile) {
  68.         curl_setopt($this->_ch, CURLOPT_COOKIEJAR, $_cookieFile);
  69.     }
  70.        
  71.         /**
  72.      * 设置url
  73.      * @param $_url
  74.      */
  75.     protected function setUrl($_url) {
  76.                 $this->_url = $_url;
  77.                 curl_setopt($this->_ch, CURLOPT_URL, $_url);
  78.         }
  79.        
  80.     /**
  81.      * 设置get方式提交时的数据
  82.      * @param $_get_data 字符串或数组
  83.      * @return mixed
  84.      */
  85.     protected function _setGetData($_get_data) {
  86.         if(is_array($_get_data)) {
  87.            return $this->_getDataToString($_get_data);
  88.         } elseif(is_string($_get_data)) {
  89.            return $_get_data;
  90.         }
  91.     }

  92.     /**
  93.      * 设置post方式提交时的数据
  94.      * @param array|string $_post_data
  95.      */
  96.     protected function _setPostData ($_post_data) {
  97.         curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $_post_data);
  98.     }

  99.     /**
  100.      * 将提交的数组形式的信息解析为字符串用于get方式提交
  101.      * @param array $_get_data
  102.      * @return string
  103.      */
  104.     protected function _getDataToString(array $_get_data) {
  105.                 return '?' . http_build_query($_get_data);  //参考一楼,换成了http_build_query函数,另外oschina的编辑功能实在是太残了!
  106.         }
  107. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|IPiaoBo Inc. ( 渝ICP备17002826号 )

GMT+8, 2025-5-8 01:04 , Processed in 0.074129 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表