Klien HTTP tentang steroid

Kebetulan Anda tidak ingin menyeret klien HTTP yang kuat dan berat ke dalam sebuah proyek, tetapi Anda ingin mengambil sesuatu yang ringan, tetapi fungsinya tidak cukup. Untuk mengatasi pengorbanan ini, saya memiliki kelas dekorator kecil yang telah saya terbitkan secara publik di bawah lisensi MIT.

Ubah versi protokol

HTTP / 2 datang kepada kami, tetapi tidak semua server, serta tidak setiap klien, mendukungnya. Jika Anda mencoba mengirim permintaan dengan memaksa protokol versi 2, Anda mungkin menerima kesalahan dari server 505 HTTP Version Not Supported. Paket webclient / ext-protocol-version memecahkan masalah yang mungkin dibuat-buat ini. Setelah menerima tanggapan 505, klien akan mengulangi permintaan tersebut, tetapi dengan versi protokol yang ditentukan dalam tanggapan server.

<?php

use Webclient\Extension\ProtocolVersion\Client;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;

/** 
 * @var ClientInterface $client  PSR-18  HTTP Client.
 */
$http = new Client($client);

/** @var RequestInterface $request */
$response = $http->sendRequest($request);

Pengalihan

Ini sangat jarang, tetapi itu terjadi ketika klien tidak tahu bagaimana mengikuti pengalihan ketika merespons dengan kode 3xx. Dalam kasus ini, paket webclient / ext-redirect akan membantu . Semuanya dasar di sini, kami meneruskan klien kami dan jumlah maksimum pengalihan yang diizinkan per permintaan ke konstruktor.

<?php

use Webclient\Extension\Redirect\Client;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;

/** 
 * @var ClientInterface $client  PSR-18  HTTP Client.
 * @var int $maxRedirects    .
 */
$http = new Client($client, $maxRedirects);

/** @var RequestInterface $request */
$response = $http->sendRequest($request);

Logging

. webclient/ext-log , . , PSR-3 . Webclient\Extension\Log\Formatter\Formatter, ID ( -) - Webclient\Extension\Log\IdGenerator\IdGenerator. :

  • Webclient\Extension\Log\IdGenerator\UniqueIdGenerator - uniqid()

  • Webclient\Extension\Log\Formatter\RawHttpFormatter - RAW-.

<?php

use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Webclient\Extension\Log\Client;
use Webclient\Extension\Log\Formatter\Formatter;
use Webclient\Extension\Log\IdGenerator\IdGenerator;

/** 
 * @var ClientInterface $client  PSR-18  HTTP Client.
 * @var LoggerInterface $logger  PSR-3  .
 * @var IdGenerator|null $idGenerator  ID-.
 *        null   
 *      Webclient\Extension\Log\IdGenerator\UniqueIdGenerator.
 * @var Formatter|null $formatter   . 
 *        null   
 *      Webclient\Extension\Log\Formatter\RawHttpFormatter.
 */
$http = new Client(
    $client,
    $logger,
    $idGenerator,
    $formatter,
    LogLevel::INFO, //   
    LogLevel::INFO, //     ( 1xx)
    LogLevel::INFO, //     ( 2xx)
    LogLevel::INFO, //      ( 3xx)
    LogLevel::ERROR, //       ( 4xx)
    LogLevel::ERROR, //       ( 5xx)
    LogLevel::WARNING //    HTTP 
);

/** @var RequestInterface $request */
$response = $http->sendRequest($request);

, . ( -). , Webclient\Extension\Cookie\Cookie\Storage webclient/ext-cookie, :

  • Webclient\Extension\Cookie\Cookie\ArrayStorage - . ;

  • Webclient\Extension\Cookie\Cookie\NetscapeCookieFile - Netscape.

<?php

use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;
use Webclient\Extension\Cookie\Client;
use Webclient\Extension\Cookie\Cookie\Storage;

/** 
 * @var ClientInterface $client  PSR-18  HTTP Client.
 * @var Storage $storage  .
 *               .
 */
$http = new Client($client, $storage);

/** @var RequestInterface $request */
$response = $http->sendRequest($request);

, . - ( ), webclient/ext-cache. , Psr\SimpleCache\CacheInterface PSR-6, Psr\Http\Message\ResponseFactoryInterface Psr\Http\Message\StreamFactoryInterface PSR-17.

HTTP- .

<?php

use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\SimpleCache\CacheInterface;
use Webclient\Extension\Cache\Client;

/** 
 * @var ClientInterface $client  PSR-18  HTTP Client.
 * @var CacheInterface $cache  PSR-6  .
 * @var ResponseFactoryInterface $responseFactory 
 *       PSR-17   .
 * @var StreamFactoryInterface $streamFactory
 *       PSR-17   .
 * @var string ,     (, ID ).
 */
$http = new Client(
  $client,
  $cache,
  $responseFactory,
  $streamFactory,
  $privateKey
);

/** @var RequestInterface $request */
$response = $http->sendRequest($request);

, . , - .

, PSR-7 - . Psr\Http\Message\RequestInterface (Psr\Http\Message\ServerRequestInterface ). , withUploadedFiles($files) HTTP-. , , . webclient/helper-form . Psr\Http\Message\ResponseFactoryInterface Psr\Http\Message\StreamFactoryInterface.

, (, API), , , .

webclient/fake-http-client, Psr\Http\Client\ClientInterface, Psr\Http\Server\RequestHandlerInterface PSR-15 ( Psr\Http\Message\RequestInterface Psr\Http\Message\ServerRequestInterface). Psr\Http\Server\RequestHandlerInterface - , .

<?php

use Webclient\Fake\Client;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

/** 
 * @var RequestHandlerInterface $handler   . 
 * @var array $serverParams  ,    
 *         Psr\Http\Message\RequestInterface 
 *      Psr\Http\Message\ServerRequestInterface.
 */
$client = new Client($handler, $serverParams);

/**
 * @var RequestInterface $request  HTTP-
 */
$response = $client->sendRequest($request);

Psr\Http\Message\ServerRequestInterface , , Webclient\Fake\Client::NOREPLACEATTRIBUTE ( ).

<?php

use Webclient\Fake\Client;
use Psr\Http\Server\RequestHandlerInterface;

/** 
 * @var Client $client. 
 * @var ServerRequestInterface $request.
 */
$request = $request->withAttribute(Client::NOREPLACEATTRIBUTE, true);
$response = $client->sendRequest($request);

- , Webclient\Fake\Handler\SimpleRoutingHandler - .

<?php

use Webclient\Fake\Client;
use Webclient\Fake\Handler\SimpleRoutingHandler;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Server\RequestHandlerInterface;

/** 
 * @var RequestHandlerInterface $notFoundHandler  , 
 *          .
 * @var RequestHandlerInterface $entityCreatedHandler  
 *          (POST /entities).
 * @var RequestHandlerInterface $entityHandler  
 *         (GET /entities/1).
 * @var RequestHandlerInterface $entityDeletedHandler  
 *         (DELETE /entities/2).
 * @var RequestInterface $errorRequest   URI (GET /users).
 * @var RequestInterface $entityCreatingRequest   
 *       (POST /entities).
 * @var RequestInterface $entityRequest   
 *       (GET /entities/1).
 * @var RequestInterface $entityDeletingRequest   
 *       (DELETE /entities/2).
 */

$handler = new SimpleRoutingHandler($notFoundHandler);
$handler
    ->route(['GET', 'HEAD'], '/entities/1', $entityHandler)
    ->route(['POST'], '/entities', $entityCreatedHandler)
    ->route(['DELETE'], '/entities/2', $entityDeletedHandler)
;
$client = new Client($handler);

$resp1 = $client->sendRequest($errorRequest); //   404
$resp2 = $client->sendRequest($entityCreatingRequest); //    201
$resp3 = $client->sendRequest($entityRequest); //     200
$resp4 = $client->sendRequest($entityDeletingRequest); //     204

, - . !




All Articles