php - 在命令行上工作时php上的curl连接超时
问题描述
我有一个 php api,它托管在另一台服务器/域中,并使用 php curl 从另一台服务器访问,突然它停止连接,但是当我尝试在命令行中访问 api 时它会工作。
<?php
$requestPayload = array(
'user_id' => API_USER_ID,
'user_key' => API_KEY,
'select_limit' => '*',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,"https://example.com/direct/_api/list.php");
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
curl_setopt($curl, CURLOPT_POST,1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($requestPayload));
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
$result = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
?>
上面的代码会给我错误Http error Failed to connect to example.com port 443: Connection timed out
,但是当我在命令中运行 url 时它工作正常
curl -XPOST -d 'user_id=vvcZ....&user_key=T0Z8...&select_limit=*' 'http://example.com/direct/_api/list.php'
请我不知道问题是来自发送服务器还是api服务器。
解决方案
尝试删除您定义连接超时的行:
curl_setopt($curl, CURLOPT_TIMEOUT, 120);
您还在 cURL 中添加了很多规则,例如CURLOPT_SSL_VERIFYPEER
. 尝试删除这些规则。我注意到在命令行 curl 中,url 没有 https,由于您的规则,这对您的代码不起作用。
推荐阅读
- angular - 具有多个系列+堆叠的角度剑道条形图
- javascript - 如何在 Chart.js 中设置时间笛卡尔图表的 xAxes 最小值和最大值
- kubernetes - 如何使用浏览器从 docker desktop k8s pod 获得响应?
- twitter-bootstrap - 定义最大容器大小 [boostrap 5]
- orm - prisma:为什么我不能将“null”设置为可空列的默认值?
- java - 创建新列表作为列表
- > 在 Java 中
- html - 表单提交发送 POST 请求而不是 GET
- python - 如何在 Python/Django 中将 MP4 转换为具有多音频和多视频质量的 HLS?
- javascript - 使用样式组件的类型定义错误
- swift - Collectionview 动态高度变化,约束在 Swift 中不起作用