当前位置: 首页 > news >正文

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

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

<?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请求。例如:

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
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);}
}
http://www.lryc.cn/news/365086.html

相关文章:

  • MongoDB~基础知识记录
  • DSP28335模块配置模板系列——ADC配置模板
  • 字符串转换为字节数组、16进制转换为base64、base64转换为字符串数组、base64转换为16进制(微信小程序)
  • c++中, 直接写浮点数, 是float 还是 double?
  • C++核心编程友元的应用
  • C#,JavaScript实现浮点数格式化自动保留合适的小数位数
  • Android基础-工程目录结构说明
  • 浅谈提示词发展现状,Prompt 自动优化是未来。
  • 揭秘智能测径仪省钱之道!每年能为每条产线省上百万!
  • echaerts图例自动滚动并隐藏翻页按钮
  • OpenCV的小部件最基本范例
  • 内置类型知多少?
  • 【C++题解】1090 - 同因查找
  • uni微信小程序editor富文本组件如何插入图片
  • LabVIEW调用国产硬件DLL的稳定性问题及解决方案
  • 基础篇01——SQL的基本语法和分类
  • HOW - 面试技巧系列 - 全英文面试
  • 【人工智能】第六部分:ChatGPT的进一步发展和研究方向
  • 新能源管理系统主要包括哪些方面的功能?
  • python如何快速的判断一个key在json的第几层呢,并修改其value值
  • Python基础用语:揭示编程世界的底层逻辑与无限可能
  • react 中使用 swiper
  • 2024年搭建知识库系统5大工具推荐
  • Golang内存分配分三种Golang内存分配分三种类型
  • Marin说PCB之如何在主板上补偿链路中的走线的等长误差?
  • 企业在现代市场中的战略:通过数据可视化提升财务决策
  • printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);
  • JAVA小案例-分别计算100以内奇数和偶数的和
  • 头歌初识redis答案
  • Linux.小技巧快捷键