【发布时间】:2021-01-21 19:36:58
【问题描述】:
我正在使用第三方 API,当您出错时它会返回 400 HTTP STATUS。 使用 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, 1);
curl_setopt($ch, 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);
【问题讨论】:
-
504 Gateway Timeout 是由该 API 的后端服务器发出的,不在请求中,与 408 Request Timeout 不同。我猜标题可能是错误的,请检查 Postman 拥有的 User-Agent、令牌或其他配置,并且 curl 没有配置。
标签: php curl http-status-code-504