PHP-cURL 出站调用在本地主机中有效,但在 AWS 托管网站中无效,尽管允许所有流量
PHP-cURL outbound call works in localhost but not in AWS hosted website despite allowing all traffic
我在我的 wordpress 网站(托管在 aws linux 上)中使用 curl 从几个 api 获取一些信息。问题:我仅从 api 之一获得连接超时。我也联系了 api 供应商,他们说 api 工作正常。同样的代码在 5 天前运行良好。
现在经过堆栈和 运行 一些变体后,结果是:
1)相同的代码在本地主机上工作。
2)它也适用于邮递员。
3) 代码已从 Postman 复制到网站,但仍然超时。 4) 我编辑了 aws vpn nacl 以允许除了 aws 推荐的流量之外的所有入站和出站流量,仍然超时。
这是我使用的基本功能,从postman复制过来然后修改:
function my2get_curl($myurl){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $myurl,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_USERAGENT =>$user_agent,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
curl_close($curl);
if ($err) {
echo " cURL Error #:" . $err;
echo json_encode($info,JSON_PRETTY_PRINT);
die('');
} else {
return $response;
}
}
这是 result/curl 错误(除了端口号更改为 80 外,http 也一样):
Failed to connect to www.travelpayouts.com port 443: Connection timed out
curl_info:
{ "url": "https:\/\/www.travelpayouts.com\/whereami?locale=en&callback=useriata&ip=<my.ip.address>", "content_type": null, "http_code": 0, "header_size": 0, "request_size": 0, "filetime": -1, "ssl_verify_result": 0, "redirect_count": 0, "total_time": 21.03931, "namelookup_time": 0.066799, "connect_time": 0, "pretransfer_time": 0, "size_upload": 0, "size_download": 0, "speed_download": 0, "speed_upload": 0, "download_content_length": -1, "upload_content_length": -1, "starttransfer_time": 0, "redirect_time": 0, "redirect_url": "", "primary_ip": "", "certinfo": [], "primary_port": 0, "local_ip": "", "local_port": 0 }
代码或(更有可能)aws 设置有问题吗?我该如何找出导致问题的原因并解决它。
您遇到此问题是因为亚马逊 IP 已关闭,无法访问我们的 API。您可以在 Amazon 中发送您的静态 IP,我们将添加它们。
我在我的 wordpress 网站(托管在 aws linux 上)中使用 curl 从几个 api 获取一些信息。问题:我仅从 api 之一获得连接超时。我也联系了 api 供应商,他们说 api 工作正常。同样的代码在 5 天前运行良好。
现在经过堆栈和 运行 一些变体后,结果是: 1)相同的代码在本地主机上工作。 2)它也适用于邮递员。 3) 代码已从 Postman 复制到网站,但仍然超时。 4) 我编辑了 aws vpn nacl 以允许除了 aws 推荐的流量之外的所有入站和出站流量,仍然超时。
这是我使用的基本功能,从postman复制过来然后修改:
function my2get_curl($myurl){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $myurl,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_USERAGENT =>$user_agent,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
curl_close($curl);
if ($err) {
echo " cURL Error #:" . $err;
echo json_encode($info,JSON_PRETTY_PRINT);
die('');
} else {
return $response;
}
}
这是 result/curl 错误(除了端口号更改为 80 外,http 也一样):
Failed to connect to www.travelpayouts.com port 443: Connection timed out
curl_info:
{ "url": "https:\/\/www.travelpayouts.com\/whereami?locale=en&callback=useriata&ip=<my.ip.address>", "content_type": null, "http_code": 0, "header_size": 0, "request_size": 0, "filetime": -1, "ssl_verify_result": 0, "redirect_count": 0, "total_time": 21.03931, "namelookup_time": 0.066799, "connect_time": 0, "pretransfer_time": 0, "size_upload": 0, "size_download": 0, "speed_download": 0, "speed_upload": 0, "download_content_length": -1, "upload_content_length": -1, "starttransfer_time": 0, "redirect_time": 0, "redirect_url": "", "primary_ip": "", "certinfo": [], "primary_port": 0, "local_ip": "", "local_port": 0 }
代码或(更有可能)aws 设置有问题吗?我该如何找出导致问题的原因并解决它。
您遇到此问题是因为亚马逊 IP 已关闭,无法访问我们的 API。您可以在 Amazon 中发送您的静态 IP,我们将添加它们。