Недавно у меня начались проблемы с фрагментом кода, который был стабильным в течение достаточно долгого времени.Он устанавливает соединение с GameStop, чтобы получить страницу там.Несколько лет работал нормально, но теперь возвращает тайм-аут.
Сначала я предположил, что была какая-то блокировка IP или пользовательского агента.Тем не менее, я запустил совершенно новые машины на DigitalOcean и Vultr, и у обеих возникла одна и та же проблема.Хотя все машины могут использовать cURL через командную строку и нормально получать страницу.
Как ни странно, код также работает на моей локальной машине разработки, которая представляет собой Windows-коробку.Так что, не уверены, связана ли проблема с PHP, работающим в Linux?
<code><?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://www.gamestop.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//curl_setopt($ch, CURLOPT_SSLVERSION, 6); -explicitly use TLS v1.2
$html = curl_exec($ch);
$info = curl_getinfo($ch);
$error = curl_error($ch);
curl_close($ch);
echo '<pre>' . var_export($error, true) . '
'.'
' . var_export($info, true) . '
'.'HTML:
';?>
Приведенный выше код возвращает время ожидания в любой нелокальной среде, в которой я пытался его запустить. В тех же средах страницу можно получить с помощью cURL через командную строку.Я нашел несколько похожих вопросов, но большинство указывает на проблему с версией SSL / TLS.Я также пытался это проверить (см. Закомментированную строку), но с тем же результатом.
Часть проблемы в том, что я не уверен, что существует реальный способ отладки тайм-аута, поступающего с сервера,как на самом деле все это может быть причиной.Единственная реальная подсказка, с которой я столкнулся, это то, что она работает на компьютере с Windows и в командной строке в более высоких средах.Будем благодарны за любую помощь или советы!
Редактировать: Также удалось воспроизвести проблему на виртуальной машине Windows Server 2016.