poc-api-proxy/proxy.php
2017-10-23 22:51:57 +02:00

74 lines
1.6 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) {
header(sprintf('%s: %s', $header, implode(', ', $values)));
}
echo $response->getBody();
}
/**
* Does a request to the API of Bittrex.
*
* @param ServerRequest $request
* @param Client $client
*
* @return \GuzzleHttp\Psr7\Response
*/
function doRequest(ServerRequest $request, Client $client)
{
$headers = [];
foreach ($request->getHeaders() as $name => $value) {
$headers[$name] = $value[0];
}
$serverParams = $request->getServerParams();
$uri = isset($serverParams['PATH_INFO']) ? ltrim($serverParams['PATH_INFO']) : '';
$url = sprintf('https://bittrex.com/api/v1.1/%s', $uri);
unset($headers['host']);
return $client->request(
$request->getMethod(),
$url,
[
'headers' => $headers,
'body' => $request->getBody(),
]
);
}
try {
$apiResponse = doRequest(
ServerRequestFactory::fromGlobals(),
new Client()
);
} catch (ClientException $e) {
$apiResponse = $e->getResponse();
}
sendResponse(new Response(
$apiResponse->getBody(),
$apiResponse->getStatusCode(),
$apiResponse->getHeaders()
));