【问题标题】:Reading the error body in PHP curl_exec [duplicate]在 PHP curl_exec 中读取错误正文 [重复]
【发布时间】:2012-09-24 08:56:23
【问题描述】:

可能重复:
Using PHP curl how does one get the response body for a 400 response

当使用 PHP 的 curl_exec 调用 RESTful API 时,文档显示http://php.net/manual/en/function.curl-exec.php

成功时返回 TRUE,失败时返回 FALSE。但是,如果 设置了 CURLOPT_RETURNTRANSFER 选项,它将返回结果 成功,失败为 FALSE。

当 curl_exec 失败时,它返回 false。但是,远程服务器可能已尝试返回有用的消息来解决该错误。当 curl_exec 只返回 false 时,我们如何访问此消息?

例如,远程 API 可能会返回此消息和 HTTP 400 状态代码:

{"Items":[{"Field":"FirstName","Description":"FirstName is required and cannot be null."}]}

目前我无法阅读已返回的此错误消息,而是我得到的都是错误的。我也看过 curl_info 。我确实设置了回传。

在 C# 中,我会使用 exception.Response.GetResponseStream 方法并编写:

    private static string Post(WebClient client, string uri, string postData)
    {
        string response = string.Empty;
        try
        {
            response = client.UploadString(uri, "POST", postData);
        }
        catch (WebException ex)
        {
            var stream = ex.Response.GetResponseStream(); // here
            if (stream != null)
            {
                using (var reader = new StreamReader(stream))
                {
                    response = reader.ReadToEnd();
                }
            }
        }
        return response;
    }

如何在 PHP 中做到这一点? curl_exec 是正确的方法还是我应该使用其他方法?

【问题讨论】:

  • 这只是返回返回的任何状态代码的字符串,例如我得到的 http 400 的“错误请求”。它不返回远程 API 设置的消息。实际上,不 - 我刚刚再次检查,curl_error 返回一个空字符串
  • @JK。除了...套接字,我看不到任何这样做的方法,
  • 设置 curl_setopt($curl, CURLOPT_FAILONERROR, false);curl_setopt($curl, CURLOPT_HTTP200ALIASES, array(400)); 后,$curl_result 只返回“错误请求”(一个小的改进 - 在返回 false 之前)
  • @JK。抱歉,$curl_result 是什么? curl_exec()的返回值?

标签: php curl httpresponse http-error


【解决方案1】:

【讨论】:

  • 如果你看看你看到的 cmets 他不是那个意思
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2010-10-11
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多