【发布时间】: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