diff --git a/src/Composer/Util/StreamContextFactory.php b/src/Composer/Util/StreamContextFactory.php index 384ff79dd..04561670e 100644 --- a/src/Composer/Util/StreamContextFactory.php +++ b/src/Composer/Util/StreamContextFactory.php @@ -43,17 +43,19 @@ final class StreamContextFactory if (isset($proxyPort)) { $proxyURL .= ":" . $proxyPort; + } else { + if ('http://' == substr($proxyURL, 0, 7)) { + $proxyURL .= ":80"; + } else if ('https://' == substr($proxyURL, 0, 8)) { + $proxyURL .= ":443"; + } } // http(s):// is not supported in proxy - if ('http://' == substr($proxy, 0, 7)) { - $proxy = 'tcp://' . rtrim(substr($proxy, 7), '/') . (parse_url($proxy, PHP_URL_PORT) ? '' : ':80'); - } else if ('https://' == substr($proxy, 0, 8)) { - $proxy = 'ssl://' . rtrim(substr($proxy, 8), '/') . (parse_url($proxy, PHP_URL_PORT) ? '' : ':443'); - } + $proxyURL = str_replace(array('http://', 'https://'), array('tcp://', 'ssl://'), $proxyURL); if (0 === strpos($proxyURL, 'ssl:') && !extension_loaded('openssl')) { - throw new \RuntimeException('You must enable the openssl extension to use a proxy over https'); + throw new \RuntimeException('You must enable the openssl extension to use a proxy over https'); } $options['http'] = array( diff --git a/tests/Composer/Test/Util/StreamContextFactoryTest.php b/tests/Composer/Test/Util/StreamContextFactoryTest.php index b50c0cef8..d39fbe340 100644 --- a/tests/Composer/Test/Util/StreamContextFactoryTest.php +++ b/tests/Composer/Test/Util/StreamContextFactoryTest.php @@ -97,7 +97,7 @@ class StreamContextFactoryTest extends \PHPUnit_Framework_TestCase $context = StreamContextFactory::getContext(); $options = stream_context_get_options($context); - $this->assertEquals(array('http' => array( + $this->assertEquals(array('http' => array( 'proxy' => $expected, 'request_fulluri' => true, )), $options);