【问题标题】:How to get the response body from 400 status php request [closed]如何从 400 状态 php 请求中获取响应正文 [关闭]
【发布时间】:2018-01-16 22:54:25
【问题描述】:

我知道我可以使用 cURL,但我正在使用不允许使用 cURL 的服务器。

所以我的问题是:我正在使用file_get_contents 来获取返回状态400 的请求的响应正文。使用 $http_response_header 我可以获得响应的标题,但是由于某种原因 PHP 没有显示响应正文!

当它返回200 状态时,file_get_contents 返回响应正文,但是400 状态它不返回响应正文。我怎样才能找回它?

【问题讨论】:

  • 400 表示您发送了错误的请求,没有要检索的正文。
  • 我们如何知道为什么您没有与我们共享的代码正在创建一个 HTTP 请求,而您将其发送到的服务器(也是一个秘密,它运行的服务器端代码也是如此)认为无效?

标签: php


【解决方案1】:

4xxHTTP status codes 表示“客户端错误”。

更具体地说,400 status code 的含义是“错误请求”。这意味着 HTTP 请求格式错误,服务器(或处理它的服务器端脚本)不理解它。

file_get_contents()的文档说明:

函数返回读取数据或失败时返回FALSE

不同于200 的状态码是失败。


有一种方法可以在错误时获取请求的正文,而不是 FALSE。您所要做的就是创建一个stream context,将其配置为ignore the HTTP errors,并将其作为第三个参数传递给file_get_contents()

$url = 'http://localhost/';

$options = array(
    'http' => array(
        'ignore_errors' => true,
    ),
);
$context = stream_context_create($options);

$data = file_get_contents($url, false, $context);

$data 现在包含响应正文,但您必须解析 $http_response_header[0] 才能知道请求是否成功。

无论如何,400 的状态码意味着发出请求的代码中有错误;你应该修复请求(可能你提交一个正文)。

【讨论】:

  • 它有响应,如果我在我的 chrome 浏览器中打开它,它会显示正文。我知道这并不常见,但由于某种原因我使用的这个 API 在正文中提供了错误详细信息。
  • 更新了答案。
  • @Samul 原来的答案被否决了,这是有充分理由的;这还不够好。我阅读了文档,编写了一些代码并更新了答案。我很高兴它对您有所帮助;我也学会了写这些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
相关资源
最近更新 更多