poc-api-proxy/index.php

79 wiersze
1.7 KiB
PHP

<?php
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Phly\Http\ServerRequestFactory;
use Phly\Http\ServerRequest;
use Phly\Http\Response;
require __DIR__.'/vendor/autoload.php';
/**
* Sends an HTTP response.
*
* @param Response $response
*/
function sendResponse(Response $response)
{
http_response_code($response->getStatusCode());
foreach ($response->getHeaders() as $header => $values) {
if (strtolower($header) === 'content-type') {
header(sprintf('%s: %s', $header, implode('; ', $values)));
}
}
$body = $response->getBody();
echo $body;
return $body;
}
/**
* Does a request to the API of Bittrex.
*
* @param ServerRequest $request
* @param Client $client
*
* @return \GuzzleHttp\Psr7\Response
*/
function doRequest(ServerRequest $request, Client $client, $host)
{
$headers = [];
foreach ($request->getHeaders() as $name => $value) {
$headers[$name] = $value[0];
}
$serverParams = $request->getServerParams();
$path = !empty($serverParams['PATH_INFO']) ? $serverParams['PATH_INFO'] : $serverParams['REQUEST_URI'];
$url = $host.$path;
unset($headers['host']);
return $client->request(
$request->getMethod(),
$url,
[
'headers' => $headers,
'body' => $request->getBody(),
]
);
}
try {
$apiResponse = doRequest(
ServerRequestFactory::fromGlobals(),
new Client(),
getenv('PHP_PROXY_REMOTEHOST')
);
} catch (ClientException $e) {
$apiResponse = $e->getResponse();
}
return sendResponse(new Response(
$apiResponse->getBody(),
$apiResponse->getStatusCode(),
$apiResponse->getHeaders()
));