zounar / php-proxy
将您的 HTTP/HTTPS 请求转发到另一个服务器。
Requires
- php: >=5.6.0
- ext-curl: *
- ext-zlib: *
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);