<?php // 创建一个代理服务器 $proxy = stream_socket_server('tcp://127.0.0.1:8000', $errno, $errstr); if (!$proxy) { die("创建代理服务器失败:$errstr ($errno)"); } while (true) { // 接受客户端连接请求 $client = stream_socket_accept($proxy); if ($client) { // 从客户端读取请求 $request = fread($client, 8192); // 修改请求头,伪装为百度文心一言API的请求 $request = str_replace( 'Host: localhost:8000', 'Host: api.lovelive.tools', $request ); // 创建与API接口的连接 $api = stream_socket_client('tcp://api.lovelive.tools:80', $errno, $errstr, 30); if ($api) { // 向API接口发送请求 fwrite($api, $request); // 获取API的响应并返回给客户端 while (!feof($api)) { fwrite($client, fread($api, 8192)); } fclose($api); } else { fclose($client); } } } fclose($proxy);
将代码保存为proxy.php,通过命令行运行:
php proxy.php
此时代理服务器运行在127.0.0.1:8000端口。
使用curl命令通过代理发送请求示例:
curl -x localhost:8000 https://api.lovelive.tools/api/SweetNothings/1
server { listen 80; server_name api.mydomain.com; location / { proxy_pass http://localhost:8000; proxy_set_header Host api.lovelive.tools; } }
反向代理PHP代码示例,实现请求转发与响应返回:
<?php // 创建与API接口的连接 $api = stream_socket_client('tcp://api.lovelive.tools:80', $errno, $errstr, 30); if ($api) { // 从客户端读取请求体 $request = file_get_contents('php://input'); // 向API接口发送请求 fwrite($api, $request); // 获取API响应并返回客户端 while (!feof($api)) { echo fread($api, 8192); } fclose($api); } else { header('HTTP/1.1 500 Internal Server Error'); echo "与API接口连接失败"; }
将代码保存为reverse_proxy.php,命令行启动:
php -S localhost:8000 reverse_proxy.php
反向代理服务器即可在localhost:8000端口运行。
客户端请求直接发送至api.mydomain.com,服务器负责转发至百度文心一言API并返回响应。