欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-21 14:26:58
最近做项目,后台已经做好了但是前台的模版还没下来,所以测试比较麻烦。于是写了个简单的脚本通过curl的方式模拟表单提交。可以通过数组和字符串两种方式提交数据。 复制代码...

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