use Friendica\App;
use Friendica\BaseFactory;
use Friendica\Core\Config\IConfig;
+use Friendica\Core\System;
use Friendica\Network\HTTPClient;
use Friendica\Network\IHTTPClient;
+use Friendica\Util\Crypto;
use Friendica\Util\Profiler;
+use Friendica\Util\Strings;
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;
$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');
RequestOptions::CONNECT_TIMEOUT => 10,
RequestOptions::TIMEOUT => $this->config->get('system', 'curl_timeout', 60),
// by default we will allow self-signed certs
- // but you can override this
+ // but it can be overridden
RequestOptions::VERIFY => (bool)$this->config->get('system', 'verifyssl'),
RequestOptions::PROXY => $proxy,
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);
+ // Designate a temporary file that will store cookies during the session.
+ // Some websites test the browser for cookie support, so this enhances results.
+ $resolver->setCookieJar(get_temppath() .'/resolver-cookie-' . Strings::getRandomName(10));
+
+ return new HTTPClient($logger, $this->profiler, $guzzle, $resolver);
}
}