Я пытаюсь внедрить вход в Google на моем веб-сайте, который написан на Symfony2, используя API Google Client . Я выполнил инструкции здесь , но когда я вызываю $ client-> authenticate ($ code); команда генерирует исключение, говорящее, что:
Не удалось подключиться к порту www.googleapis.com 443: Сеть недоступна
В чем проблема?
Решение 2 (из обновления). это, кажется, некоторая ошибка с интерфейсами ipv6 и завиток с 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», я использовал 4.4.4.4 и 8.8.8.8 google DNS, поэтому я добавил этот домен в файл / etc / hosts с помощью ipv4 из вывода команды curl и проблемы была решена.
#/etc/hosts ... 64.233.186.95 www.googleapis.com #DONT COPY THIS IP, USE THE ONE FROM YOUR CURL OUTPUT ...
и#/etc/hosts ... 64.233.186.95 www.googleapis.com #DONT COPY THIS IP, USE THE ONE FROM YOUR CURL OUTPUT ...
Похож на исходящий брандмауэр / прокси-сеть. Вы должны быть в состоянии проверить, что использование ping
и curl
из машины, на которой работает ваш сайт.
Если ваша сеть под прокси. Вы должны установить URL-адрес прокси-сервера и порт
curl_setopt($ch, CURLOPT_PROXY, "http://url.com"); //your proxy url curl_setopt($ch, CURLOPT_PROXYPORT, "80"); // your proxy port number
Это решает мою проблему
Попробуйте это echo ipv4 >> ~ / .curlrc. Это работало для меня.
Если бы та же проблема – проблема заключалась в разрешении dns, как упоминалось в ответе le0diaz.
На ubuntu 16.04 мы смогли решить это путем chaning /etc/gai.conf, изменив предисловие для IPv6, раскомментируя следующую строку: priorityence :: ffff: 0: 0/96 100