Detect and hint for solutions for common curl errors, fixes #9376
parent
472f78bff1
commit
34bdc6cbf2
|
@ -224,6 +224,12 @@ EOT
|
||||||
try {
|
try {
|
||||||
$this->httpDownloader->get($proto . '://repo.packagist.org/packages.json');
|
$this->httpDownloader->get($proto . '://repo.packagist.org/packages.json');
|
||||||
} catch (TransportException $e) {
|
} catch (TransportException $e) {
|
||||||
|
if ($hints = HttpDownloader::getExceptionHints($e)) {
|
||||||
|
foreach ($hints as $hint) {
|
||||||
|
$result[] = $hint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$result[] = '<error>[' . get_class($e) . '] ' . $e->getMessage() . '</error>';
|
$result[] = '<error>[' . get_class($e) . '] ' . $e->getMessage() . '</error>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ use Composer\IO\IOInterface;
|
||||||
use Composer\IO\ConsoleIO;
|
use Composer\IO\ConsoleIO;
|
||||||
use Composer\Json\JsonValidationException;
|
use Composer\Json\JsonValidationException;
|
||||||
use Composer\Util\ErrorHandler;
|
use Composer\Util\ErrorHandler;
|
||||||
|
use Composer\Util\HttpDownloader;
|
||||||
use Composer\EventDispatcher\ScriptExecutionException;
|
use Composer\EventDispatcher\ScriptExecutionException;
|
||||||
use Composer\Exception\NoSslException;
|
use Composer\Exception\NoSslException;
|
||||||
|
|
||||||
|
@ -382,6 +383,12 @@ class Application extends BaseApplication
|
||||||
$io->writeError('<error>The following exception is caused by a lack of memory or swap, or not having swap configured</error>', true, IOInterface::QUIET);
|
$io->writeError('<error>The following exception is caused by a lack of memory or swap, or not having swap configured</error>', true, IOInterface::QUIET);
|
||||||
$io->writeError('<error>Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details</error>', true, IOInterface::QUIET);
|
$io->writeError('<error>Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details</error>', true, IOInterface::QUIET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($hints = HttpDownloader::getExceptionHints($exception)) {
|
||||||
|
foreach ($hints as $hint) {
|
||||||
|
$io->writeError($hint, true, IOInterface::QUIET);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -157,7 +157,6 @@ class CurlDownloader
|
||||||
|
|
||||||
curl_setopt($curlHandle, CURLOPT_URL, $url);
|
curl_setopt($curlHandle, CURLOPT_URL, $url);
|
||||||
curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, false);
|
curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, false);
|
||||||
//curl_setopt($curlHandle, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
|
|
||||||
curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 10);
|
curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 10);
|
||||||
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 300);
|
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 300);
|
||||||
curl_setopt($curlHandle, CURLOPT_WRITEHEADER, $headerHandle);
|
curl_setopt($curlHandle, CURLOPT_WRITEHEADER, $headerHandle);
|
||||||
|
|
|
@ -378,4 +378,32 @@ class HttpDownloader
|
||||||
$io->writeError('<'.$type.'>'.ucfirst($type).' from '.$url.': '.$data[$type].'</'.$type.'>');
|
$io->writeError('<'.$type.'>'.ucfirst($type).' from '.$url.': '.$data[$type].'</'.$type.'>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getExceptionHints(\Exception $e)
|
||||||
|
{
|
||||||
|
if (!$e instanceof TransportException) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
false !== strpos($e->getMessage(), 'Resolving timed out')
|
||||||
|
|| false !== strpos($e->getMessage(), 'Could not resolve host')
|
||||||
|
) {
|
||||||
|
Silencer::suppress();
|
||||||
|
$testConnectivity = file_get_contents('https://8.8.8.8', false, stream_context_create(array(
|
||||||
|
'ssl' => array('verify_peer' => false),
|
||||||
|
'http' => array('follow_location' => false, 'ignore_errors' => true)
|
||||||
|
)));
|
||||||
|
Silencer::restore();
|
||||||
|
if (false !== $testConnectivity) {
|
||||||
|
return array(
|
||||||
|
'<error>The following exception probably indicates you have misconfigured DNS resolver(s)</error>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'<error>The following exception probably indicates you are offline or have misconfigured DNS resolver(s)</error>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue