1
0
Fork 0

Improve proxy error messages for streams

pull/9334/head
johnstevenson 2020-10-24 18:20:31 +01:00
parent fa3f1d5050
commit 2a913c7a68
2 changed files with 12 additions and 4 deletions

View File

@ -58,7 +58,7 @@ final class StreamContextFactory
/**
* @param string $url
* @param array $options
* @param bool $forCurl
* @param bool $forCurl When true, will not add proxy values as these are handled separately
* @psalm-return array{http:{header: string[], proxy?: string, request_fulluri: bool}, ssl: array}
* @return array formatted as a stream context array
*/
@ -75,13 +75,17 @@ final class StreamContextFactory
// Add stream proxy options if there is a proxy
if (!$forCurl) {
$proxy = ProxyManager::getInstance()->getProxyForRequest($url);
$isHttpsRequest = 0 === strpos($url, 'https://');
if ($proxy->isSecure()) {
if (!extension_loaded('openssl')) {
throw new TransportException('You must enable the openssl extension to use a proxy over https.');
throw new TransportException('You must enable the openssl extension to use a secure proxy.');
}
if (0 === strpos($url, 'https://')) {
throw new TransportException('PHP does not support https requests to a secure proxy.');
if ($isHttpsRequest) {
throw new TransportException('You must enable the curl extension to make https requests through a secure proxy.');
}
} elseif ($isHttpsRequest && !extension_loaded('openssl')) {
throw new TransportException('You must enable the openssl extension to make https requests through a proxy.');
}
$proxyOptions = $proxy->getContextOptions();

View File

@ -226,6 +226,10 @@ class StreamContextFactoryTest extends TestCase
public function testInitOptionsForCurlDoesNotIncludeProxyAuthHeaders()
{
if (!extension_loaded('curl')) {
$this->markTestSkipped('The curl is not available.');
}
$_SERVER['http_proxy'] = 'http://username:password@proxyserver.net:3128/';
$options = array();