Viewing file: HttpTransporter.php (2.63 KB) -rw-rw-r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
declare(strict_types=1);
namespace OpenAI\Transporters;
use JsonException; use OpenAI\Contracts\Transporter; use OpenAI\Exceptions\ErrorException; use OpenAI\Exceptions\TransporterException; use OpenAI\Exceptions\UnserializableResponse; use OpenAI\ValueObjects\Transporter\BaseUri; use OpenAI\ValueObjects\Transporter\Headers; use OpenAI\ValueObjects\Transporter\Payload; use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface;
/** * @internal */ final class HttpTransporter implements Transporter { /** * Creates a new Http Transporter instance. */ public function __construct( private readonly ClientInterface $client, private readonly BaseUri $baseUri, private readonly Headers $headers, ) { // .. }
/** * {@inheritDoc} */ public function requestObject(Payload $payload): array|string { $request = $payload->toRequest($this->baseUri, $this->headers);
try { $response = $this->client->sendRequest($request); } catch (ClientExceptionInterface $clientException) { throw new TransporterException($clientException); }
$contents = (string) $response->getBody();
if ($response->getHeader('Content-Type')[0] === 'text/plain; charset=utf-8') { return $contents; }
try { /** @var array{error?: array{message: string, type: string, code: string}} $response */ $response = json_decode($contents, true, 512, JSON_THROW_ON_ERROR); } catch (JsonException $jsonException) { throw new UnserializableResponse($jsonException); }
if (isset($response['error'])) { throw new ErrorException($response['error']); }
return $response; }
/** * {@inheritDoc} */ public function requestContent(Payload $payload): string { $request = $payload->toRequest($this->baseUri, $this->headers);
try { $response = $this->client->sendRequest($request); } catch (ClientExceptionInterface $clientException) { throw new TransporterException($clientException); }
$contents = $response->getBody()->getContents();
try { /** @var array{error?: array{message: string, type: string, code: string}} $response */ $response = json_decode($contents, true, 512, JSON_THROW_ON_ERROR);
if (isset($response['error'])) { throw new ErrorException($response['error']); } } catch (JsonException) { // .. }
return $contents; } }
|