<?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); // リクエストヘッダーを変更します,Baidu Wenxinの言葉に偽装されています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
サーバー{ 匂いく80; server_name api.mydomain.com; 位置 / { proxy_pass http:// localhost:8000; proxy_set_headerホスト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に直接送信され、サーバーはそれをBaidu Wenxin Yiyan APIに転送し、応答を返します。