zounar/php-proxy

将您的 HTTP/HTTPS 请求转发到另一个服务器。

1.1.0 2021-03-28 19:22 UTC

This package is auto-updated.

Last update: 2024-09-07 15:18:01 UTC


README

此代理脚本允许您将所有 HTTP/HTTPS 请求转发到另一个服务器。适用于所有常见的请求类型,包括 GET、带有文件的 POST 请求、PATCH 和 PUT 请求。它对要求的设置最少(PHP >=5.6、libcurl、gzip),即使在最小的免费托管上也能使用,并且具有自己的简单授权和 Cookie 支持。

如何使用

  • Proxy.php 脚本复制到 PHP 服务器公开访问的文件夹(该脚本独立,没有 PHP 依赖项)
  • 对此脚本发起 cURL 请求
  • 添加带有授权密钥的 Proxy-Auth在此处找到
  • 添加带有要由代理请求的 URL 的 Proxy-Target-URL
  • (可选)添加 Proxy-Debug 头以启用调试模式

为了保护代理不被未经授权的用户使用,请考虑在 代理源文件 和所有请求中更改 Proxy-Auth 令牌。

通过 composer 使用

这可能在你想要重定向进入你的应用的请求时很有用。

  • 运行 composer require zounar/php-proxy
  • Proxy::run(); 行添加到你想执行的地方(通常是在控制器动作中)
    • 在这个例子中,脚本位于 AppController - actionProxy
      use Zounar\PHPProxy\Proxy;
      
      class AppController extends Controller {
      
          public function actionProxy() {
              Proxy::$AUTH_KEY = '<your-new-key>';
              // Do your custom logic before running proxy
              $responseCode = Proxy::run();
              // Do your custom logic after running proxy
              // You can utilize HTTP response code returned from the run() method
          }
      }
      
  • 对你的网站发起 cURL 请求
    • 在例子中,这将是对 http://your-web.com/app/proxy 的请求
  • 添加带有授权密钥的 Proxy-Auth在此处找到
  • 添加带有要由代理请求的 URL 的 Proxy-Target-URL
  • (可选)添加 Proxy-Debug 头以启用调试模式

为了保护代理不被未经授权的用户使用,请考虑在调用 Proxy::run() 之前通过调用 Proxy::$AUTH_KEY = '<your-new-key>'; 修改 Proxy-Auth 令牌。然后在所有请求中更改令牌。

使用示例

以下示例展示了如何向 https://www.github.com 执行 GET 请求。代理脚本在 http://www.foo.bar/Proxy.php。所有代理设置都保持默认,响应将自动回显。

$request = curl_init('http://www.foo.bar/Proxy.php');

curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Proxy-Auth: Bj5pnZEX6DkcG6Nz6AjDUT1bvcGRVhRaXDuKDX9CjsEs2',
    'Proxy-Target-URL: https://www.github.com'
));

curl_exec($request);

调试

为了从代理中显示一些调试信息,请将 Proxy-Debug: 1 头添加到请求中。这将显示包含请求头、响应头和响应体的纯文本调试信息。

$request = curl_init('http://www.foo.bar/Proxy.php');

curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Proxy-Auth: Bj5pnZEX6DkcG6Nz6AjDUT1bvcGRVhRaXDuKDX9CjsEs2',
    'Proxy-Target-URL: https://www.github.com',
    'Proxy-Debug: 1'
));

curl_exec($request);

指定 User-Agent

某些网站可能根据不同的用户代理返回不同的内容。在这种情况下,请向 cURL 请求添加 User-Agent 头,它将自动传递给目标网站的请求。在这种情况下,它是 Ubuntu 上的 Firefox 70。

$request = curl_init('http://www.foo.bar/Proxy.php');

curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0',
    'Proxy-Auth: Bj5pnZEX6DkcG6Nz6AjDUT1bvcGRVhRaXDuKDX9CjsEs2',
    'Proxy-Target-URL: https://www.github.com'
));

curl_exec($request);

错误 301 永久移动

在调用代理(而不是目标网站)时可能会发生重定向(不是目标网站),例如在 http -> https 重定向期间。你可以修改/修复代理 URL(建议这样做),或者在 curl_exec 之前添加 CURLOPT_FOLLOWLOCATION 选项。

$request = curl_init('http://www.foo.bar/Proxy.php');

curl_setopt($request, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Proxy-Auth: Bj5pnZEX6DkcG6Nz6AjDUT1bvcGRVhRaXDuKDX9CjsEs2',
    'Proxy-Target-URL: https://www.github.com'
));

curl_exec($request);

将响应保存到变量中

默认情况下,cURL 行为是回显 curl_exec 的响应。为了将响应保存到变量中,你只需要添加 CURLOPT_RETURNTRANSFER cURL 选项。

$request = curl_init('http://www.foo.bar/Proxy.php');

curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    'Proxy-Auth: Bj5pnZEX6DkcG6Nz6AjDUT1bvcGRVhRaXDuKDX9CjsEs2',
    'Proxy-Target-URL: https://www.github.com'
));

$response = curl_exec($request);