使用PHP curl如何获得400响应的响应主体

Jas*_*ice 17 php curl

我正在调用的api使用HTTP代码400返回验证错误的json对象.我使用PHP的curl库实现了客户端,但是在错误时curl_exec返回false.如何在出错时获取响应正文?

请注意,我正在设置 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

mar*_*rio 22

你可以取消CURLOPT_FAILONERROR一次.CURLOPT_HTTP200ALIASES并按预期添加错误状态代码也可能有所帮助.

 curl_setopt($conn, CURLOPT_FAILONERROR, false);
 curl_setopt($conn, CURLOPT_HTTP200ALIASES, (array)400);
Run Code Online (Sandbox Code Playgroud)

(libcurl也有一个CURLOPT_ERRORBUFFER,但你不能在PHP中使用该选项.)

顺便说一句,curl在4xx错误的情况下不返回响应体就行为正确.不确定是否可以覆盖.因此,您可能必须迁移到PEAR HTTP_Request2类似的HTTP请求类,您可以在其中偏离标准.

  • "在4xx错误的情况下,不通过返回响应体来正确地表现卷曲"你能说更多吗?RFC似乎另有建议:*服务器应该包含一个实体,其中包含错误情况的解释,以及它是暂时的还是永久的.这些状态代码适用于任何请求方法.用户代理应该向用户显示任何包含的实体.* (6认同)

Eru*_*409 8

通过将FAILONERROR设置为false,我可以从400响应中获取内容,而不必另外将400作为正常的200响应.


Fra*_*nes 5

添加:

curl_setopt($ch, CURLOPT_HTTP200ALIASES, array(400));
Run Code Online (Sandbox Code Playgroud)

  • 应该是`curl_setopt($ ch,CURLOPT_HTTP200ALIASES,array(400));`。这里的运算符`=>`是意外的。 (2认同)