封装PHP用于发送GET和POST请求的公共方法

封装了ThinkPHP用于发送GET和POST请求的公共方法。这个方法可以放在你的公共函数文件中,或者创建一个独立的类来管理这些请求。

php 复制代码
<?php
namespace app\common\utils;

use think\facade\Log;
use think\exception\HttpException;

class HttpRequest
{
    /**
     * 发送GET请求
     *
     * @param string $url 请求的URL
     * @param array $params URL参数
     * @param array $headers 请求头
     * @return mixed
     */
    public static function get($url, $params = [], $headers = [])
    {
        $ch = curl_init();
        if (!empty($params)) {
            $url .= '?' . http_build_query($params);
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        $output = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

        if ($error) {
            Log::error('HTTP GET Request Error: ' . $error);
            throw new HttpException(500, 'HTTP GET Request Error: ' . $error);
        }

        return json_decode($output, true);
    }

    /**
     * 发送POST请求
     *
     * @param string $url 请求的URL
     * @param array $data POST数据
     * @param array $headers 请求头
     * @return mixed
     */
    public static function post($url, $data = [], $headers = [])
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        $output = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

        if ($error) {
            Log::error('HTTP POST Request Error: ' . $error);
            throw new HttpException(500, 'HTTP POST Request Error: ' . $error);
        }

        return json_decode($output, true);
    }
}

使用示例

你可以在你的控制器或模型中使用这个封装的公共方法来发送GET和POST请求。例如:

php 复制代码
use app\common\utils\HttpRequest;

class SomeController extends Controller
{
    public function someAction()
    {
        // 发送GET请求
        $getResponse = HttpRequest::get('https://api.example.com/data', ['param1' => 'value1']);

        // 发送POST请求
        $postResponse = HttpRequest::post('https://api.example.com/submit', ['field1' => 'value1']);

        // 处理响应
        if ($getResponse && $postResponse) {
            // 处理成功响应
        } else {
            // 处理错误
        }
    }
}

注意事项

  1. 错误处理:在生产环境中,确保有适当的错误处理机制。
  2. 超时设置:根据实际需求调整超时时间。
  3. 安全性:发送请求时注意数据的安全性,尤其是敏感信息的传输。

如果遇到报错:HTTP GET Request Error: SSL certificate problem: unable to get local issuer certificate 。说明ssl证书没配置,我这里懒得配置,你可以自行百度,所以我就干脆禁用检查ssl证书,当然不建议各位这样做!

php 复制代码
<?php
namespace app\common\utils;

use think\facade\Log;
use think\exception\HttpException;

class HttpRequest
{
    /**
     * 发送GET请求
     *
     * @param string $url 请求的URL
     * @param array $params URL参数
     * @param array $headers 请求头
     * @return mixed
     */
    public static function get($url, $params = [], $headers = [])
    {
        $ch = curl_init();
        if (!empty($params)) {
            $url .= '?' . http_build_query($params);
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用SSL验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 禁用SSL验证
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        $output = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

        if ($error) {
            Log::error('HTTP GET Request Error: ' . $error);
            throw new HttpException(500, 'HTTP GET Request Error: ' . $error);
        }

        return json_decode($output, true);
    }

    /**
     * 发送POST请求
     *
     * @param string $url 请求的URL
     * @param array $data POST数据
     * @param array $headers 请求头
     * @return mixed
     */
    public static function post($url, $data = [], $headers = [])
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用SSL验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 禁用SSL验证
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        $output = curl_exec($ch);
        $error = curl_error($ch);
        curl_close($ch);

        if ($error) {
            Log::error('HTTP POST Request Error: ' . $error);
            throw new HttpException(500, 'HTTP POST Request Error: ' . $error);
        }

        return json_decode($output, true);
    }
}
相关推荐
但要及时清醒几秒前
ArrayList和LinkedList
java·开发语言
孚亭16 分钟前
Swift添加字体到项目中
开发语言·ios·swift
hweiyu0020 分钟前
Go、DevOps运维开发实战(视频教程)
开发语言·golang·运维开发
kali-Myon21 分钟前
NewStarCTF2025-Week4-Web
sql·安全·web安全·php·ctf·ssti·ssrf
mm-q291522272931 分钟前
Python+Requests零基础系统掌握接口自动化测试
开发语言·python
星星火柴9361 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
码界奇点1 小时前
Rust 性能优化全流程从 flamegraph 定位瓶颈到 unsafe 与 SIMD 加速响应快
开发语言·性能优化·rust·simulated annealing
丛雨要玩游戏2 小时前
字符函数和字符串函数
c语言·开发语言·算法
八个程序员2 小时前
自定义函数(C++)
开发语言·c++·算法
ad钙奶长高高2 小时前
【C语言】初始C语言
c语言·开发语言·算法