0
有沒有辦法通過PHP「路由」HTTP(API)調用?基本上我有3個系統。系統A可以到達系統B,而系統B可以到達系統C.但是,系統A不能到達系統C.是否可以很容易地將我的API調用路由到系統B,系統B可以充當中間人並與系統C通信,然後與系統B通信可以用通話結果迴應A嗎?通過PHP路由HTTP(API)調用
有沒有辦法通過PHP「路由」HTTP(API)調用?基本上我有3個系統。系統A可以到達系統B,而系統B可以到達系統C.但是,系統A不能到達系統C.是否可以很容易地將我的API調用路由到系統B,系統B可以充當中間人並與系統C通信,然後與系統B通信可以用通話結果迴應A嗎?通過PHP路由HTTP(API)調用
你要創建的是代理。這可以很好地用PHP完成。下面的代碼是一個非常簡單的實現代理的,讀POST數據,並提交到不同的URL,並將結果返回到原來的客戶端:
$targetUrl = 'https://www.example.com/api/foobar';
$headers = [];
$postData = file_get_contents('php://input');
foreach ($_SERVER as $key => $value)
{
if (stripos($key, "HTTP_") === 0 && stripos($key, "Host") === false)
{
$key = str_replace(" ", "-", ucwords(strtolower(str_replace("_"," ",substr($key,5)))));
$headers[] = "$key: $value";
}
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $targetUrl);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_VERBOSE, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($curl);
if (curl_errno($curl))
throw new \Exception(sprintf("Connection error %s: %s", curl_errno($curl), curl_error($curl)));
curl_close($curl);
echo gzdecode($response);
這僅僅是一個例子,它使一些assumitions (有效載荷是POST數據,響應是gzipped等)
隨意根據需要調整代碼,或者查看各種更高級的基於PHP代理的實現,例如https://github.com/jenssegers/php-proxy。
而你的嘗試看起來像......? – Bugfixer