Browse Source

Fill out request sending

master
J. King 4 years ago
parent
commit
05ce358d62
  1. 12
      lib/HttpClient/Exception.php
  2. 27
      lib/HttpClient/HttpClient.php

12
lib/HttpClient/Exception.php

@ -0,0 +1,12 @@
<?php
/** @license MIT
* Copyright 2018 J. King et al.
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace MensBeam\Lax\HttpClient;
use MensBeam\Lax\Exception as BaseException;
class Exception extends BaseException {
}

27
lib/HttpClient.php → lib/HttpClient/HttpClient.php

@ -4,8 +4,9 @@
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace MensBeam\Lax;
namespace MensBeam\Lax\HttpClient;
use MensBeam\Lax\Url;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\RequestFactoryInterface;
@ -28,4 +29,28 @@ class HttpClient implements RequestFactoryInterface, ClientInterface {
$this->client = $clientImplementation;
$this->requestFactory = $requestFactory;
}
public function sendRequest(RequestInterface $request): ResponseInterface {
$stop = $this->maxRedirects;
for ($a = 0; $a <= $stop; $a++) {
$response = $this->client->sendRequest($request);
$code = $response->getStatusCode();
if ($code < 300 || $code >= 400 || $code === 304) {
return $response;
} else {
$loc = $response->getHeader("Location");
for ($b = 0; $b < sizeof($loc); $b++) {
if ($url = Url::fromString($loc[$b], (string) $request->getUri())) {
$request = $request->withUri($url);
if ($code === 303 && !in_array($request->getMethod(), ["GET", "HEAD"])) {
$request = $request->withMethod("GET");
continue 2;
}
}
}
return $response;
}
}
throw new Exception("tooManyRedirects");
}
}
Loading…
Cancel
Save