Failed to connect to www.googleapis.com port 443: Network unreachable

匿名 (未验证) 提交于 2019-12-03 02:01:02

问题:

I'm trying to implement google sign-in in my website that is written in Symfony2 using Google Client API. I followed the instructions here, but when I call $client->authenticate($code); command an exception is thrown telling that:
Failed to connect to www.googleapis.com port 443: Network unreachable
What is the problem?

回答1:

Solution 2 (from update). it seems to be some bug with ipv6 interfaces and curl with php, so another solution is to set the appropiate option in curl function to connect to the remote server with ipv4 in your php script

curl_setopt( $curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);


Solution 1.

The same happened to me (solved by adding the ip v4 and hostname to /etc/hosts file), As pointed by @hans-z in another answer comment, I tried using next command to validate the network issue.

curl -v https://www.googleapis.com  

It turned out that it was randomly, and only 1 in 10 tries the curl command could connect to the server, the response was something like: ("La red es inaccesible" means in english "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 

And the successfull response was:

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: */* >  

The weird message was "Hostname was NOT found in DNS cache", I was using google DNS's 4.4.4.4 and 8.8.8.8, so I added that domain to my /etc/hosts file using the ipv4 from the curl command output and the problem was solved.

#/etc/hosts ... 64.233.186.95 www.googleapis.com #DONT COPY THIS IP, USE THE ONE FROM YOUR CURL OUTPUT ... 


回答2:

Looks like an outgoing firewall/proxy/network issue. You should be able to verify that using ping and curl from the machine where your website runs.



回答3:

If your network under proxy. You should set the proxy url and port

curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number 

This is solves my problem



回答4:

Try this echo ipv4 >> ~/.curlrc. It Worked for me.



回答5:

Had the same issue - problem was with dns resolution, like mentioned in le0diaz's answer.

On ubuntu 16.04, we were able to solve it by chaning /etc/gai.conf, changing the presedance for IPv6, uncommenting the following line: precedence ::ffff:0:0/96 100



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!