Пересылка Slim HTTP-запросов клиенту Guzzle - PullRequest
0 голосов
/ 09 мая 2019

Я использую Slim на сервере REST API.Некоторые из конечных точек должны быть вслепую проксированы к другому серверу, и я использую Guzzle для этой части.Большую часть времени он работает просто для использования запроса Slim в качестве запроса Guzzle (с некоторыми незначительными изменениями, такими как хост и т. Д.).

<?php
use Psr\Http\Message\ServerRequestInterface as SlimRequest;
use Psr\Http\Message\ResponseInterface as SlimResponse;
use GuzzleHttp\Psr7\Request as GuzzleRequest;
use GuzzleHttp\Psr7\Response as GuzzleRequest;

$app->post('/bla/bla/bla', function (SlimRequest $slimRequest, SlimResponse $slimResponse) {
    $slimRequest = $slimRequest->withUri($slimRequest->getUri()->withHost('https://example.com'));
    $guzzleResponse=$this->httpClient->send($slimRequest);
});

Одна из моих конечных точек использует многокомпонентный контент, а файлы - нисодержание POST отправляется.В качестве альтернативы я попробовал следующее, но безуспешно.

<?php
use Psr\Http\Message\ServerRequestInterface as SlimRequest;
use Psr\Http\Message\ResponseInterface as SlimResponse;
use GuzzleHttp\Psr7\Request as GuzzleRequest;
use GuzzleHttp\Psr7\Response as GuzzleRequest;

$app->post('/bla/bla/bla', function (SlimRequest $slimRequest, SlimResponse $slimResponse) {
    $headers = array_intersect_key($slimRequest->getHeaders(), array_flip(["HTTP_CONNECTION", "CONTENT_LENGTH", "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING", "HTTP_ACCEPT_LANGUAGE", "CONTENT_TYPE"]));
    $guzzleRequest = new \GuzzleHttp\Psr7\Request($slimRequest->getMethod(), $slimRequest->getUri()->getPath(), $headers, $slimRequest->getBody());
    $guzzleResponse=$this->httpClient->send($guzzleRequest);
});

При необходимости я прибегну к ручному созданию многочастной формы , однако, я ожидаю, что есть лучшееспособ сделать это, так как оба стандарта PSR-7.

Как это лучше всего сделать?

1 Ответ

0 голосов
/ 09 мая 2019

PSR-7 Объекты запроса НЕМНОГО.То есть вы не можете изменять значения.Установка чего-то нового вернет новый экземпляр .

https://www.php -fig.org / psr / psr-7 /

Итак, простоизменить

$slimRequest->withUri($slimRequest->getUri()->withHost('https://example.com'));

на

$slimRequest = $slimRequest->withUri($slimRequest->getUri()->withHost('https://example.com'));

Кроме того, $slimRequest->getUri()->withHost('https://example.com') также возвращает объект запроса.Что вам нужно здесь:

$slimRequest->getUri()->withHost('https://example.com')->getHost()

, который даст вам вашу строку.

...