通过PHP路由HTTP(API)调用

通过PHP路由HTTP(API)调用,php,http-proxy,Php,Http Proxy,有没有办法通过PHP“路由”HTTP(API)调用?基本上我有3个系统。系统A可以到达系统B,系统B可以到达系统C。但是,系统A无法到达系统C。是否有一个简单的方法将我的API调用路由到系统B,它可以充当中间人并与系统C通信,然后B可以用调用结果响应A?您尝试创建的是代理。这可以通过PHP很好地完成。以下代码是代理的一个非常简单的实现,读取POST数据,将其提交到不同的URL,并将结果返回给原始客户端: $targetUrl = 'https://www.example.com/api/foob

有没有办法通过PHP“路由”HTTP(API)调用?基本上我有3个系统。系统A可以到达系统B,系统B可以到达系统C。但是,系统A无法到达系统C。是否有一个简单的方法将我的API调用路由到系统B,它可以充当中间人并与系统C通信,然后B可以用调用结果响应A?

您尝试创建的是代理。这可以通过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);
这只是一个示例,它进行了几个假设(有效负载是POST数据,响应是gzip,等等)


您可以根据自己的需要调整代码,或者查看各种更高级的基于PHP的代理实现,例如…

您的尝试看起来像…?