使用PHPcurl如何获得400响应的响应体

eqzww0vc  于 10个月前  发布在  PHP
关注(0)|答案(4)|浏览(76)

我调用的API返回一个验证错误的json对象,HTTP代码为400。我使用PHP的curl库实现了客户端,但在错误curl_exec时返回false。如何获取出错时的响应正文?
请注意,我设置的是curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

llycmphe

llycmphe1#

您可以取消设置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请求类,在这些类中您可能会偏离标准。

hgncfbus

hgncfbus2#

我可以通过将FAILONERROR设置为false来从400响应中获取内容,而不必将400别名为正常的200响应。

uqzxnwby

uqzxnwby3#

加上这个:

curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));

字符串

csga3l58

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);

字符串

相关问题