我使用Google API库在我们正在构建的web应用程序中进行服务器到服务器的通信。它适用于我们的开发和测试服务器,然而,当我们将应用程序转移到生产环境时,Curl命令会导致在尝试获取Oauth2令牌时连接被拒绝。
在我们的开发和测试服务器上:
卷曲-vhttps://accounts.google.com/o/oauth2/token
成功,并返回完整的405响应
在我们的生产服务器上,curl命令导致
curl -v https://accounts.google.com/o/oauth2/token
* About to connect() to accounts.google.com port 443 (#0)
* Trying 216.58.216.205... Connection refused
* Trying 2607:f8b0:4009:808::200d... Failed to connect to 2607:f8b0:4009:808::200d: Network is unreachable
* Success
* couldn't connect to host
* Closing connection #0
curl: (7) Failed to connect to 2607:f8b0:4009:808::200d: Network is unreachable
谷歌把我们的网站列入黑名单了吗?所有这些服务器都在同一个域上。
事实证明,它实际上是我们的DMZ防火墙阻止了传出请求
这解决了我的问题:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);