Как я могу воспроизвести ошибку тайм-аута HTTP 408 для тестирования?

В рамках регистрации на моем сайте Drupal 7 я требую, чтобы пользователь ввел действительный номер телефона. Вместо простой проверки я использую API Numverify.com для проверки формата числа для каждой страны и получения дополнительной информации. Это делается с помощью запроса curl, который возвращает объект json.

На днях API был недоступен в течение нескольких часов, и из-за моего недостатка предвидения пользователи не могли зарегистрироваться, пока я не обошел запрос API.

Чтобы предотвратить это в будущем, мне нужно иметь возможность правильно обрабатывать коды ошибок, такие как 408. Кто-нибудь сможет рассказать мне, как я могу реплицировать запрос на тайм-аут, локально или иначе, для целей тестирования, пожалуйста?

2

Решение

сделать страницу php с содержанием: <?php http_response_code(408); и принеси это с завитком.

2

Другие решения

Благодаря @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.

Я действительно не знаю, является ли это наиболее эффективным способом сделать это, поэтому, если кто-то может улучшить мой ответ, пожалуйста, не стесняйтесь.

В то же время, я надеюсь, что это поможет кому-то еще там!

1

Не уверен насчет D7 конкретно, но я знаю, что вы можете GuzzleHttp попробовать перехватить RequestException, которое включает в себя коды ответов серий 400 и 500. Вы можете дополнительно установить тайм-аут, чтобы он не реагировал в течение X секунд, а затем просто продолжайте. Вы также можете предоставить опции CURLOPT_CONNECTTIMEOUT и CURLOPT_TIMEOUT для вашего объекта cURL, согласно https://stackoverflow.com/a/11066378/7118098

0

Вы также можете моделировать медленную сеть с последними версиями Firefox Development Edition. Но я не уверен, насколько вы можете контролировать время ожидания. Видеть это статья для получения дополнительной информации об этой функции.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector