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

ymdaylpp  于 2023-03-12  发布在  其他
关注(0)|答案(4)|浏览(269)

作为Drupal 7站点注册的一部分,我要求用户输入一个有效的电话号码,而不是只做简单的验证,我使用Numverify.comAPI来验证每个国家号码的格式,并获得额外的信息,这是通过一个curl请求来完成的,该请求返回一个json对象。
有一天,API在几个小时内无法访问,由于我缺乏远见,用户无法注册,直到我绕过API请求。
为了防止将来发生这种情况,我需要能够正确处理错误代码,如408。有人能告诉我如何复制超时请求,本地或其他,用于测试目的吗?

4bbkushb

4bbkushb1#

制作一个php页面,内容如下:<?php http_response_code(408);,然后用curl取它。

vnzz0bqm

vnzz0bqm2#

你也可以用最新版本的Firefox Development Edition来模拟慢速网络。但是我不确定你能在多大程度上控制延迟。查看article了解更多关于这个功能的信息。

mum43rcc

mum43rcc3#

多亏了@hanshenrik,我才得以将他的回答与我自己的研究结合起来。
为了使用curl进行测试和处理,我创建了一个包含http_response_code(408);的PHP文件,然后从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文件中适当地处理这段代码。
我真的不知道这是否是最有效的方法,所以如果有人可以改进我的答案,请随意。
在此期间,我希望这能帮助其他人!

fjnneemd

fjnneemd4#

不太清楚D7的具体情况,但我知道你可以用GuzzleHttp来尝试捕获RequestException,它包含400和500系列的响应代码。你可以另外设置一个超时,这样如果它在X秒内没有响应,就可以继续。你也可以为你的cURL对象提供CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT选项,就像https://stackoverflow.com/a/11066378/7118098那样

相关问题