Я пытаюсь реализовать вход в Google на своем веб-сайте, который написан на Symfony2 с помощью API клиента Google. Я следовал инструкциям Вот, но когда я вызываю $ client-> authenticate ($ code); Выдается исключение, сообщающее, что:
Не удалось подключиться к порту 443 www.googleapis.com: сеть недоступна
В чем проблема?
Решение 2 (из обновления).
Кажется, что это ошибка в интерфейсах ipv6 и curl с php, поэтому другое решение — установить опцию подходящего в функции curl для подключения к удаленному серверу с ipv4 в вашем скрипте php.
curl_setopt ($ curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
Решение 1.
То же самое случилось со мной (решается добавлением ip v4 и имени хоста в файл / etc / hosts), Как указано @ hans-z в другом ответном комментарии, я попытался использовать следующую команду для проверки проблемы с сетью.
curl -v https://www.googleapis.com
Оказалось, что это было случайно, и только 1 из 10 попыток команда curl могла подключиться к серверу, ответ был примерно такой:
(«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...
* 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
Странное сообщение было «Имя хоста НЕ найдено в кеше DNS», я использовал google DNS 4.4.4.4 и 8.8.8.8, поэтому я добавил этот домен в свой файл / etc / hosts, используя ipv4 из вывода команды curl, и проблема было решено
#/etc/hosts
...
64.233.186.95 www.googleapis.com
#DONT COPY THIS IP, USE THE ONE FROM YOUR CURL OUTPUT
...
Похоже на исходящую проблему брандмауэра / прокси / сети. Вы должны быть в состоянии убедиться, что с помощью ping
а также curl
с машины, на которой работает ваш сайт.
Если ваша сеть под прокси. Вы должны установить прокси-адрес и порт
curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url
curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number
Это решает мою проблему
Попробуйте это эхо ipv4 >> ~ / .curlrc.
Это сработало для меня.
Была такая же проблема — проблема была с разрешением DNS, как упомянуто в ответе le0diaz.
В Ubuntu 16.04 мы смогли решить эту проблему, изменив /etc/gai.conf, изменив presedance для IPv6, раскомментировав следующую строку:
приоритет :: ffff: 0: 0/96 100