我正在使用这个库从wordpress网站获得Youtube的视频和直播。https://github.com/google/google-api-php-client
在过去的一个月里,代码运行良好,但突然开始出现随机连接失败错误(10次尝试中有2次失败,其他都很好)
这是我收到错误的代码:
function googleapis_get_live_event_widget(){
//Youtube Videos and Live Events
require_once( get_stylesheet_directory() . '/lib/google-api-php-client/src/Google/autoload.php' );
$GOOGLE_DEVELOPER_KEY = get_field('cce_api_google_developer_key','option');
$client = new Google_Client();
$client->setDeveloperKey($GOOGLE_DEVELOPER_KEY);
$youtube = new Google_Service_YouTube($client);
try {
$islive = get_field('cce_live_event','option');
$opts = array();
$opts['channelId'] = get_field('cce_api_youtube_channel_id','option');
if($islive) {
$opts['eventType'] = 'live';
}
$opts['type'] = 'video';
$opts['maxResults'] = 1;
$opts['order'] = 'date';
$live_videos = $youtube->search->listSearch('id,snippet',$opts);
$data = array();
$data['live_events'] = $live_videos;
echo Timber::compile('partials/live_event_widget.twig',$data);
} catch (Exception $e) {
$error = array();
$error['message'] = $e->getMessage();
echo Timber::compile('partials/error.twig',$error);
return;
}
}
add_shortcode('googleapis_live_widget','googleapis_get_live_event_widget');
在服务器中通过ssh执行curl -v https://www.googleapis.com
会导致尝试失败:
[~]# curl -v https://www.googleapis.com
* About to connect() to www.googleapis.com port 443 (#0)
* Trying 216.58.216.202... Connection timed out
* Trying 2607:f8b0:4009:80b::200a... Failed to connect to 2607:f8b0:4009:80b::200a: Network is unreachable
* Success
* couldn't connect to host
* Closing connection #0
curl: (7) Failed to connect to 2607:f8b0:4009:80b::200a: Network is unreachable
当请求很好时,就像这样:
curl -v https://www.googleapis.com
* About to connect() to www.googleapis.com port 443 (#0)
* Trying 216.58.216.106... connected
* Connected to www.googleapis.com (216.58.216.106) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_RSA_WITH_AES_128_CBC_SHA
* Server certificate:
* subject: CN=*.googleapis.com,O=Google Inc,L=Mountain View,ST=California,C=US
* start date: Oct 21 22:31:24 2015 GMT
* expire date: Jan 19 00:00:00 2016 GMT
* common name: *.googleapis.com
* issuer: CN=Google Internet Authority G2,O=Google Inc,C=US
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> 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: Sat, 31 Oct 2015 11:33:49 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
< Alternate-Protocol: 443:quic,p=1
< Alt-Svc: quic=":443"; p="1"; ma=604800
< Accept-Ranges: none
< Vary: Origin,Accept-Encoding
< Transfer-Encoding: chunked
<
* Connection #0 to host www.googleapis.com left intact
* Closing connection #0
此时,如果我运行页面,提要将正常显示。
我应该寻找什么来修复不一致性?
我遇到了同样的错误,并试图找出原因。
这个错误有一定的可能性。
-
你的互联网防火墙阻止了与谷歌的连接:请尝试你的laravel主机中的
ping android.googleapis.com
。或者如果CCD_ 3没有响应,则它被阻止。 -
打开你的端口让谷歌api工作,我通常打开端口
443
、5528-2230
。您可以在防火墙中配置 -
gcm-http.googleapis.com
有很多ip地址,所以你需要允许从这些ip地址连接——这是他们的一个ip地址:172.217.3.170
我通过允许他们的ip地址范围之间的连接来解决问题。你可以在防火墙软件中监控ip地址。 -
你可以在这里和这里找到谷歌api IP地址的范围
这取决于你的防火墙配置,你需要与配置防火墙的人一起设置,因为我假设你在安全的网络环境中工作。
我的一个用户试图访问Google Drive api时遇到了同样的问题。最后是由于该应用程序不被允许访问互联网。所以,他终于在他的设备中批准了我的应用程序,一切都开始正常工作。