В рамках регистрации на моем сайте Drupal 7 я требую, чтобы пользователь ввел действительный номер телефона. Вместо простой проверки я использую API Numverify.com для проверки формата числа для каждой страны и получения дополнительной информации. Это делается с помощью запроса curl, который возвращает объект json.
На днях API был недоступен в течение нескольких часов, и из-за моего недостатка предвидения пользователи не могли зарегистрироваться, пока я не обошел запрос API.
Чтобы предотвратить это в будущем, мне нужно иметь возможность правильно обрабатывать коды ошибок, такие как 408. Кто-нибудь сможет рассказать мне, как я могу реплицировать запрос на тайм-аут, локально или иначе, для целей тестирования, пожалуйста?
сделать страницу php с содержанием: <?php http_response_code(408);
и принеси это с завитком.
Благодаря @hanshenrik мне удалось совместить его ответ с моими собственными исследованиями.
Чтобы получить 408 (или любой другой ответ) для тестирования и обработки с помощью curl, я сделал файл PHP, содержащий http_response_code(408);
затем из моего файла index.php я инициировал curl:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "timeout.php");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
echo $httpcode;
Важной чертой является curl_get_info
раздел, который вернет код ответа http с предыдущей страницы. Затем я могу соответствующим образом обработать этот код в моем файле index.php.
Я действительно не знаю, является ли это наиболее эффективным способом сделать это, поэтому, если кто-то может улучшить мой ответ, пожалуйста, не стесняйтесь.
В то же время, я надеюсь, что это поможет кому-то еще там!
Не уверен насчет D7 конкретно, но я знаю, что вы можете GuzzleHttp попробовать перехватить RequestException, которое включает в себя коды ответов серий 400 и 500. Вы можете дополнительно установить тайм-аут, чтобы он не реагировал в течение X секунд, а затем просто продолжайте. Вы также можете предоставить опции CURLOPT_CONNECTTIMEOUT и CURLOPT_TIMEOUT для вашего объекта cURL, согласно https://stackoverflow.com/a/11066378/7118098
Вы также можете моделировать медленную сеть с последними версиями Firefox Development Edition. Но я не уверен, насколько вы можете контролировать время ожидания. Видеть это статья для получения дополнительной информации об этой функции.