如何重现 HTTP 408 超时错误以进行测试?

How can I reproduce an HTTP 408 timeout error for testing?

作为我的 Drupal 7 站点注册的一部分,我要求用户输入有效的 phone 号码。我不是只做简单的验证,而是使用 Numverify.com API 来验证每个国家/地区的数字格式并获取额外信息。这是通过 returns 一个 json 对象的 curl 请求完成的。

有一天 API 几个小时都无法访问,由于我缺乏远见,用户无法注册,直到我绕过 API 请求。

为了防止将来出现这种情况,我需要能够正确处理错误代码,例如 408。有人能告诉我如何在本地或其他地方复制超时请求以进行测试吗?

不确定具体的 D7,但我知道您可以 GuzzleHttp 到 try-catch RequestException,其中包括 400 和 500 系列响应代码。您还可以设置一个超时时间,这样如果它在 X 秒内没有响应,那么就继续。您还可以根据

为您的 cURL 对象提供 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 选项

您还可以使用最新版本的 Firefox 开发版模拟慢速网络。但我不确定您可以控制多少延迟。有关此功能的更多信息,请参阅此 article

创建一个包含以下内容的 php 页面:<?php http_response_code(408); 并使用 curl 获取它。

感谢@hanshenrik,我设法将他的回答与我自己的研究相结合。

为了使用 curl 进行测试和处理,为了获得 408(或任何其他响应),我制作了一个包含 http_response_code(408); 的 PHP 文件,然后从我的 index.php 文件中,我启动了卷曲:

$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 部分,它将 return 来自先前 page.I 的 http 响应代码然后可以在我的 index.php 文件中适当地处理此代码。

我真的不知道这是否是最有效的方法,所以如果有人可以改进我的答案,请随意。

与此同时,我希望这对其他人有帮助!