我调用的API返回一个验证错误的json对象,HTTP代码为400。我使用PHP的curl库实现了客户端,但在错误curl_exec时返回false。如何获取出错时的响应正文?请注意,我设置的是curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_exec
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
llycmphe1#
您可以取消设置CURLOPT_FAILONERROR一次。按预期将错误状态代码添加到CURLOPT_HTTP200ALIASES中也可能有所帮助。
CURLOPT_FAILONERROR
CURLOPT_HTTP200ALIASES
curl_setopt($conn, CURLOPT_FAILONERROR, false); curl_setopt($conn, CURLOPT_HTTP200ALIASES, (array)400);
字符串(libcurl也有一个CURLOPT_ERRORBUFFER,但不能在PHP中使用该选项。顺便说一句,curl的行为是正确的,在4xx错误的情况下不返回响应体。不知道这是否可以被覆盖。因此,您可能必须迁移到PEAR HTTP_Request2或类似的HTTP请求类,在这些类中您可能会偏离标准。
CURLOPT_ERRORBUFFER
PEAR HTTP_Request2
hgncfbus2#
我可以通过将FAILONERROR设置为false来从400响应中获取内容,而不必将400别名为正常的200响应。
uqzxnwby3#
加上这个:
curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));
字符串
csga3l584#
下面是我如何使用curl并获得403错误的完整响应体。您可以将CURLOPT_FAILONERROR设置为false,这样它就不会在错误时失败(并隐藏响应正文),然后检查响应HTTP代码:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 0); // Do not fail on HTTP errors curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // follow redirects curl_setopt($ch, CURLOPT_HEADER, 0); // Do not include header in output $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($response === false) { echo 'Curl error: ' . curl_error($ch); } if($httpCode >= 400) { // The request did not succeed, but we got a HTTP response echo 'HTTP error: ' . $httpCode . ' with message: ' . $response; } elseif($response !== false) { // Success echo 'Successful request: ' . $response; } curl_close($ch);
4条答案
按热度按时间llycmphe1#
您可以取消设置
CURLOPT_FAILONERROR
一次。按预期将错误状态代码添加到CURLOPT_HTTP200ALIASES
中也可能有所帮助。字符串
(libcurl也有一个
CURLOPT_ERRORBUFFER
,但不能在PHP中使用该选项。顺便说一句,curl的行为是正确的,在4xx错误的情况下不返回响应体。不知道这是否可以被覆盖。因此,您可能必须迁移到
PEAR HTTP_Request2
或类似的HTTP请求类,在这些类中您可能会偏离标准。hgncfbus2#
我可以通过将FAILONERROR设置为false来从400响应中获取内容,而不必将400别名为正常的200响应。
uqzxnwby3#
加上这个:
字符串
csga3l584#
下面是我如何使用curl并获得403错误的完整响应体。您可以将CURLOPT_FAILONERROR设置为false,这样它就不会在错误时失败(并隐藏响应正文),然后检查响应HTTP代码:
字符串