diff --git a/lib/private/Http/Client/Client.php b/lib/private/Http/Client/Client.php index 8501b41c06d97..6a13c7c1b2f61 100644 --- a/lib/private/Http/Client/Client.php +++ b/lib/private/Http/Client/Client.php @@ -19,6 +19,8 @@ use OCP\IConfig; use OCP\Security\IRemoteHostValidator; use OCP\ServerVersion; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; use Psr\Log\LoggerInterface; use function parse_url; @@ -477,6 +479,21 @@ public function request(string $method, string $uri, array $options = []): IResp return new Response($response, $isStream); } + /** + * Sends a PSR-7 request and returns a PSR-7 response, part of the PSR-18 interface. + * This is a thin wrapper arround the Guzzle Client implementation + * + * @param RequestInterface $request PSR-7 request interface + * + * @return ResponseInterface PSR-7 response interface + * + * @throws \Psr\Http\Client\ClientExceptionInterface If an error happens while processing the request. + */ + public function sendRequest(RequestInterface $request): ResponseInterface { + $this->preventLocalAddress((string)$request->getUri(), []); + return $this->client->sendRequest($request); + } + protected function wrapGuzzlePromise(PromiseInterface $promise): IPromise { return new GuzzlePromiseAdapter( $promise, diff --git a/lib/public/Http/Client/IClient.php b/lib/public/Http/Client/IClient.php index e4f46d44e4dfa..7c86ff56fb3e2 100644 --- a/lib/public/Http/Client/IClient.php +++ b/lib/public/Http/Client/IClient.php @@ -8,12 +8,16 @@ */ namespace OCP\Http\Client; +use Psr\Http\Client\ClientInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + /** * Interface IClient * * @since 8.1.0 */ -interface IClient { +interface IClient extends ClientInterface { /** * Default request timeout for requests @@ -268,6 +272,17 @@ public function getResponseFromThrowable(\Throwable $e): IResponse; */ public function request(string $method, string $uri, array $options = []): IResponse; + /** + * Sends a PSR-7 request and returns a PSR-7 response, part of the PSR-18 interface. + * + * @param RequestInterface $request PSR-7 request interface + * + * @return ResponseInterface PSR-7 response interface + * + * @throws \Psr\Http\Client\ClientExceptionInterface If an error happens while processing the request. + */ + public function sendRequest(RequestInterface $request): ResponseInterface; + /** * Sends an asynchronous GET request * @param string $uri