2015-06-26 55 views
0

有沒有辦法通過PHP「路由」HTTP(API)調用?基本上我有3個系統。系統A可以到達系統B,而系統B可以到達系統C.但是,系統A不能到達系統C.是否可以很容易地將我的API調用路由到系統B,系統B可以充當中間人並與系統C通信,然後與系統B通信可以用通話結果迴應A嗎?通過PHP路由HTTP(API)調用

+0

而你的嘗試看起來像......? – Bugfixer

回答

0

你要創建的是代理。這可以很好地用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