在PHP curl_exec中读取错误主体

时间:2012-10-03 12:20:13

标签: php curl httpresponse http-error

  

可能重复:
  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选项后,它将返回结果   成功,失败就错了。

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

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

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

目前我无法读取已返回的此错误消息,而是我得到的所有内容均为false。我也看过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是正确的方法还是我应该使用别的东西?

1 个答案:

答案 0 :(得分:1)