PHP http_response_code似乎不起作用。我*一定*做错了什么

PHP http_response_code doesn't seem to work. I *must* be doing something wrong

提问人:Tym 提问时间:9/22/2023 最后编辑:ADysonTym 更新时间:9/22/2023 访问量:61

问:

在 PHP 7.4.30 中构建 webhook 接收器。

我可以收到绝对没问题。那里没有问题:-)

但是,我们需要在 JSON 上进行同步验证,并发回一个 400 个错误请求和一个 JSON,并解释验证失败的原因。

所以,有两个部分......

1:我正在测试接收 php,只需一个标头即可“拒绝”任何连接,并根据我无休止的搜索结果尝试了许多不同的变体:

<?php
http_response_code('400');

die();
?>

导致屏幕空白,而不是 400。更改为 404 进行测试,但仍显示空白屏幕。

参考PHP:如何发送HTTP响应代码?我试过了

<?php
header("HTTP/1.1 400 Bad Request");
die();
?>

...这又会导致空白页。

也试过了

<?php
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi')
    {header("Status: 404 Not Found");}
else
    {header("HTTP/1.1 404 Not Found");}

die();
?>

哪。。。你猜对了......只是一张白纸。

我一定是在错误的树上吠叫,想知道您是否可以指导我如何通过 webhook 调用拒绝消息?我需要能够用响应正文拒绝它。

1a. Response with HTTP 403 return code,
response body
{
senderUniqueReference : S-005-03458900823-SUPP-20222313-12345687A
transactionId : T-006-1234567890-SUPP-20220401-1234CC ,
sentTimestamp : 2021-12-25T06:06:12.45",
message , XYZ123 - That's not our equipment
}
php http-status-codes

评论

0赞 user3783243 9/22/2023
空白页、500、200、其他的状态码是什么?
0赞 Tym 9/22/2023
奇怪。。。firefox 只显示一个空白页,我预计是 400。但是,当我在 Opera 中测试它时,我得到了 400...
3赞 M. Eriksson 9/22/2023
400 只是 HTTP 响应代码。它与身体是否空白无关。您可以获得带有空白页的 400 或 404 响应。这仅意味着除了标头之外没有其他输出。如果某些浏览器显示的内容不是空白页面,则它很可能只是由该浏览器创建的,实际上并非来自服务器。如果你想要一个响应正文,你需要输出它,就像你对普通响应所做的那样。
1赞 ADyson 9/22/2023
您应该使用浏览器的网络工具来查看服务器为任何给定请求实际返回的 HTTP 响应代码。正如 M Eriksson 所说,对于特定状态代码,你可能会或可能不会得到的图形显示是浏览器的心血来潮,与你的 PHP 代码所做的事情无关。此外,如果你正在测试最终应该是 webhook 响应的东西,它无论如何都不是为了发送回浏览器,所以你最好使用 Postman 或类似工具进行测试。
0赞 ADyson 9/22/2023
I need to be able to reject it with a response body....您可以发送带有任何 HTTP 响应代码的响应正文(也许除了 204 “No Content”!如果你和这些代码一起回声,我希望客户会看到它。

答:

2赞 ADyson 9/22/2023 #1

您应该使用浏览器的网络工具来查看服务器为任何给定请求实际返回的 HTTP 响应代码。正如 M. Eriksson 在评论中指出的那样,对于特定状态代码,你可能会或可能不会得到的图形显示是浏览器的心血来潮,与你的 PHP 代码所做的事情无关。

您可以使用任何 HTTP 响应代码发送响应正文。如果你和这些代码一起回声,我希望客户会看到它。

http_response_code('400');
echo "Your request was not accepted";
die();

注意,如果你正在测试的东西最终应该是 webhook 响应,它无论如何都不是为了发送回浏览器,所以你最好使用 PostMan 或类似工具进行测试。