首页
   /       /   
使用PHP实现小程序免配置合法域名实现请求
3月
21
使用PHP实现小程序免配置合法域名实现请求
作者: 大彭Sir    分类: 教学教程     正在检查是否收录...

使用PHP实现小程序免配置合法域名实现请求

使用场景

在我们开发小程序的时候往往需要向后端发送请求,而有些接口无法配置合法域名,比如没有备案、无法开启SSL、或者需要用户自行输入域名发送请求等等,通过使用 cURL 库创建 PHP 代理请求,我们可以轻松地绕过小程序中无法配置合法域名的限制,访问目标接口并获取响应数据。

关于cURL

cURL 是一款非常流行的开源网络库,支持多种协议,包括 HTTP、HTTPS、FTP 等。它提供了一个非常简单易用的 API,可以用来发送 HTTP 请求并获取响应数据,同时还能设置请求头、设置代理等功能。

解决方法

为了解决无法配置合法域名的问题,我们可以通过在服务器端使用 cURL 库创建 PHP 代理请求。具体实现方式是:当小程序向服务器发起请求时,服务器先用 cURL 库向目标接口发送请求,并将响应数据返回给小程序,从而绕过了域名限制。

PHP示例

<?php
$url = $_GET['url'];
if (!$url) { // 如果未传递该参数,则返回HTTP 400响应状态码和错误信息
  http_response_code(400);
  echo 'Missing URL parameter';
  exit();
}

// 创建一个cURL句柄
$ch = curl_init();

// 配置cURL请求选项
curl_setopt($ch, CURLOPT_URL, $url); // 设置请求的URL地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置是否返回响应结果
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 设置是否忽略SSL证书验证

// 发送HTTP GET请求并接收响应结果
$response = curl_exec($ch);

// 处理响应结果或请求错误
if (curl_errno($ch)) { // 如果请求发生错误,则返回HTTP 500响应状态码和错误信息
  http_response_code(500);
  echo 'Failed to send request: ' . curl_error($ch);
} else {
  // 如果请求成功,则设置Content-Type响应头部,并将响应结果返回给客户端
  header('Content-Type: application/json');
  echo $response;
}

// 关闭cURL句柄并清理相关资源
curl_close($ch);

小程序端请求示例

  onLoad: function () {
    // 在页面加载时向代理页面发起请求
    this.request();
  },
  request: function () {
    var that = this;
    wx.showLoading({title: '加载中...'});
    wx.request({
      url: 'http://你的域名/proxy.php?url=' + encodeURIComponent('https://example.com/api'), // 将需要请求的域名作为参数传递给代理页面
      success: function (res) {
        wx.hideLoading();
        if (res.statusCode === 200) {
          // 如果请求成功,则将响应结果显示在页面上
          that.setData({result: res.data.result});
        } else {
          // 如果请求失败,则提示用户出错信息
          wx.showToast({title: '请求出错', icon: 'none'});
        }
      },
      fail: function () {
        wx.hideLoading();
        // 如果请求失败,则提示用户网络错误信息
        wx.showToast({title: '网络错误', icon: 'none'});
      }
    })
  },

如果是post请求

如果请求方法为 POST,我们需要使用 $_POST 获取请求参数,并将其格式化为 URL 编码形式,然后传递给 cURL 的 CURLOPT_POSTFIELDS 选项进行发送。修改后的 PHP 代码如下:

PHP代码

<?php
if($_SERVER['REQUEST_METHOD'] == 'GET') {
  $url = $_GET['url'];
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $url = $_POST['url'];
}

if (!$url) { // 如果未传递该参数,则返回HTTP 400响应状态码和错误信息
  http_response_code(400);
  echo 'Missing URL parameter';
  exit();
}

// 创建一个cURL句柄
$ch = curl_init();

// 配置cURL请求选项
curl_setopt($ch, CURLOPT_URL, $url); // 设置请求的URL地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 设置是否返回响应结果
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 设置是否忽略SSL证书验证

// 检查是否为 POST 请求,并设置请求参数
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
}

// 发送HTTP请求并接收响应结果
$response = curl_exec($ch);

// 处理响应结果或请求错误
if (curl_errno($ch)) { // 如果请求发生错误,则返回HTTP 500响应状态码和错误信息
  http_response_code(500);
  echo 'Failed to send request: ' . curl_error($ch);
} else {
  // 如果请求成功,则设置Content-Type响应头部,并将响应结果返回给客户端
  header('Content-Type: application/json');
  echo $response;
}

// 关闭cURL句柄并清理相关资源
curl_close($ch);

在以上代码中,我们使用 $_POST 获取请求参数,并使用 http_build_query() 函数将其转化为 URL 编码形式。然后,我们使用 curl_setopt() 设置 cURL 的请求方法为 POST 并设置请求参数。最后,我们发送请求并检查是否有错误发生。

小程序请求

在小程序端,我们可以通过 wx.request() 方法发送 POST 请求,并将请求参数传递给服务器端代理程序。示例代码如下:

wx.request({
  url: 'https://yourdomain.com/proxy.php', // 代理请求的 URL
  method: 'POST', // 请求方法为 POST
  header: {
    'content-type': 'application/x-www-form-urlencoded' // 请求头为 application/x-www-form-urlencoded
  },
  data: {
    url: 'https://example.com/api', // 目标接口的 URL
    param1: 'value1', // 请求参数1
    param2: 'value2' // 请求参数2
  },
  success (res) {
    console.log(res.data) // 响应数据
  }
})

注意,在小程序端发送 POST 请求时,需要将请求参数格式化为 URL 编码形式,并将其放在 data 属性中传递给 wx.request() 方法。同时,我们还需要设置请求头为 application/x-www-form-urlencoded。

本文标签: 标签: 小程序 PHP cURL 合法域名 请求
责任声明:本页信息由网友自行发布或来源于网络,真实性、合法性由发布人负责,请仔细甄别!本站只为传递信息,我们不做任何双方证明,也不承担任何法律责任。文章内容若侵犯你的权益,请联系本站删除!
转载声明:本文作者 大彭Sir,如需转载请保留文章出处!原文链接请自行复制!

评论

Theme By Brief 鄂ICP备19010459号

sitemap

首页

分类

友链