]> git.mxchange.org Git - friendica.git/blobdiff - src/Factory/HTTPClientFactory.php
Fix HTTPClient
[friendica.git] / src / Factory / HTTPClientFactory.php
index b17e065326b53640801e576af173f61a5e079ec5..040ad75141b37781ec88cd90b1b93ad88cd3c1f0 100644 (file)
@@ -9,7 +9,9 @@ use Friendica\Network\HTTPClient;
 use Friendica\Network\IHTTPClient;
 use Friendica\Util\Profiler;
 use GuzzleHttp\Client;
+use GuzzleHttp\HandlerStack;
 use GuzzleHttp\RequestOptions;
+use mattwright\URLResolver;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\UriInterface;
@@ -32,7 +34,14 @@ class HTTPClientFactory extends BaseFactory
                $this->baseUrl  = $baseUrl;
        }
 
-       public function createClient(): IHTTPClient
+       /**
+        * Creates a IHTTPClient for communications with HTTP endpoints
+        *
+        * @param HandlerStack|null $handlerStack (optional) A handler replacement (just usefull at test environments)
+        *
+        * @return IHTTPClient
+        */
+       public function createClient(HandlerStack $handlerStack = null): IHTTPClient
        {
                $proxy = $this->config->get('system', 'proxy');
 
@@ -51,7 +60,7 @@ class HTTPClientFactory extends BaseFactory
                        ResponseInterface $response,
                        UriInterface $uri
                ) use ($logger) {
-                       $logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri]);
+                       $logger->notice('Curl redirect.', ['url' => $request->getUri(), 'to' => $uri, 'method' => $request->getMethod()]);
                };
 
                $userAgent = FRIENDICA_PLATFORM . " '" .
@@ -83,8 +92,16 @@ class HTTPClientFactory extends BaseFactory
                        RequestOptions::HEADERS => [
                                'User-Agent' => $userAgent,
                        ],
+                       'handler' => $handlerStack ?? HandlerStack::create(),
                ]);
 
-               return new HTTPClient($logger, $this->profiler, $this->config, $userAgent, $guzzle);
+               $resolver = new URLResolver();
+               $resolver->setUserAgent($userAgent);
+               $resolver->setMaxRedirects(10);
+               $resolver->setRequestTimeout(10);
+               // if the file is too large then exit
+               $resolver->setMaxResponseDataSize(1000000);
+
+               return new HTTPClient($logger, $this->profiler, $guzzle, $resolver);
        }
 }