我正在尝试在使用Symfony2编写的网站中实现Google登录,使用Google Client API。我按照这里的说明进行操作,但是当我调用$client->authenticate($code);命令时,会抛出一个异常,告诉我:
无法连接到www.googleapis.com端口443:网络不可达
问题出在哪里?
无法连接到www.googleapis.com端口443:网络不可达
问题出在哪里?
curl -v https://www.googleapis.com
事实证明,curl命令连接服务器是随机的,只有10次尝试中的1次能够成功连接,响应信息可能如下所示: ("La red es inaccesible" 的英文意思是 "network unreachable" :) )
$ curl -v https://www.googleapis.com
* Rebuilt URL to: https://www.googleapis.com/
* Hostname was NOT found in DNS cache
* Trying 64.233.186.95...
* Trying 2800:3f0:4003:c00::5f...
* connect to 2800:3f0:4003:c00::5f port 443 failed: La red es inaccesible
* Failed to connect to www.googleapis.com port 443: La red es inaccesible
* Closing connection 0
curl: (7) Failed to connect to www.googleapis.com port 443: La red es inaccesible
成功的响应如下:
curl -v https://www.googleapis.com
* Rebuilt URL to: https://www.googleapis.com/
* Hostname was NOT found in DNS cache
* Trying 64.233.186.95...
* Trying 2800:3f0:4003:c00::5f...
* Connected to www.googleapis.com (64.233.186.95) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using ECDHE-RSA-AES128-GCM-SHA256
* Server certificate:
* subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.storage.googleapis.com
* start date: 2015-04-08 14:12:01 GMT
* expire date: 2015-07-07 00:00:00 GMT
* subjectAltName: www.googleapis.com matched
* issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
* SSL certificate verify ok.
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: www.googleapis.com
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Date: Tue, 21 Apr 2015 21:38:12 GMT
< Vary: X-Origin
< Content-Type: text/html; charset=UTF-8
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
* Server GSE is not blacklisted
< Server: GSE
< Alternate-Protocol: 443:quic,p=1
< Accept-Ranges: none
< Vary: Origin,Accept-Encoding
< Transfer-Encoding: chunked
<
* Connection #0 to host www.googleapis.com left intact
奇怪的消息是“Hostname was NOT found in DNS cache”,我正在使用谷歌DNS的4.4.4.4和8.8.8.8,所以我将该域添加到我的/etc/hosts文件中,使用curl命令输出的ipv4地址并解决了这个问题。
#/etc/hosts
...
64.233.186.95 www.googleapis.com
#DONT COPY THIS IP, USE THE ONE FROM YOUR CURL OUTPUT
...
看起来是出站防火墙/代理/网络问题。您可以使用ping
和curl
从托管您的网站的机器上验证这一点。
telnet android.googleapis.com 443
命令来检查是否存在防火墙问题。 - Hirdesh Vishwdewacurl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number
遇到了同样的问题 - 问题出在 DNS 解析上,就像 le0diaz 的回答中提到的那样。
在 Ubuntu 16.04 上,我们通过更改 /etc/gai.conf 文件解决了这个问题,将 IPv6 的优先级更改为以下行的取消注释: precedence ::ffff:0:0/96 100