我正在调用的api使用HTTP代码400返回验证错误的json对象。我使用PHP的curl库实现了客户端,但是错误curl_exec
返回false。如何在错误时获得响应正文?
请注意,我正在设置curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
答案 0 :(得分:20)
您可以取消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请求类,您可以偏离标准。
答案 1 :(得分:7)
我能够通过将FAILONERROR设置为false来获取400响应的内容,而不必将400作为正常的200响应别名。
答案 2 :(得分:4)
添加:
curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));