cURL使页面永久加载,然后网关超时

问题描述

我正在使用第三方API,当您输入错误时,它将返回400 HTTP状态。 使用POSTMAN时,将显示400 HTTP错误页面,但是使用PHP的cURL时,该页面仅加载了大约一分钟,然后显示“ 504-网关超时”,我需要关闭浏览器才能能够再次访问该页面。 当cURL请求有效时(API返回200 OK),它将正常工作。

我的问题是,为什么cURL给出504错误而不是400错误? 为何忽略CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT?

下面是我的cURL代码($ token,$ payload和$ config变量均已声明且有效):

$ch = curl_init("https://api.mercadolibre.com/items?access_token=$token");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$payload);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,CURLOPT_TIMEOUT,10);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
    "User-Agent: Alcavie/" . $config['version'],"Accept: application/json","Content-Type: application/json",//"Accept-Encoding: gzip,deflate,br",//"Connection: keep-alive"
));

$error = false;
try{
    $result = curl_exec($ch);
    $resultJson = json_decode($result);
}catch(\Exception $e){
    var_dump($e);
    $error = true;
    exit;
}
curl_close($ch);

解决方法

API可能会在两次发送之间发送HTTP302,如果这样,您可能需要两个请求或
告诉cURL以通过curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
{{1} }表示客户端未及时响应先前的HTTP标头;
HTTP504可能还有其他原因,但这是最常见的原因之一。邮递员不足以对其进行正确测试(我根本不使用它);最好使用Web浏览器,单击HTTP504并选中“保留日志”复选框...,然后您可以清楚地看到连续发送了哪些HTTP标头。

调试该命令也很有用:F12

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...