2017-03-01 143 views
0

我试图在工作中使用Google云端的自然语言API,并且我相信我的企业防火墙阻止了Python和谷歌云之间的通信。对企业防火墙背后的谷歌云进行身份验证

进入终端以下后:

gcloud auth application-default login 

我的浏览器打开登录到我的谷歌帐户成功。我登录后,但是,我得到

ERROR: There was a problem with web authentication. Try running a 
gain with --no-launch-browser. 

ERROR: (gcloud.auth.application-default.login) Could not reach th 
e login server. A potential cause of this could be because you ar 
e behind a proxy. Please set the environment variables HTTPS_PROX 
Y and HTTP_PROXY to the address of the proxy in the format "proto 
col://address:port" (without quotes) and try again. 
Example: HTTPS_PROXY=https://192.168.0.1:8080 

我相信我需要联系我的IT部门为例外添加到我们的防火墙。有谁知道谷歌云自然语言处理API的地址/端口是什么?

回答

2

我无法直接回答您的问题,但我可以提供一些可能解决您问题的一般指导。

命令

gcloud auth application-default login 

是在本地运行示例代码便利帮手,但它真的不是出于各种原因,最好的权威性战略。它使用一个特殊的客户端ID,并不总是拥有所有的配额。

我推荐使用API​​的方式是服务帐户。您可以在云端控制台的API凭证下创建服务帐户,然后下载JSON密钥。然后,将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为指向您的文件,并假定您正在使用Application Default Credentials(大多数示例和客户端库使用),它将自动工作。

在App Engine和计算引擎上(假设您创建了具有正确范围的VM)服务帐户默认存在,因此您甚至不需要下载JSON并设置环境变量。

您可以使用API​​的另一种方式是创建一个API密钥,然后在URL的末尾点击?key=api-key来访问HTTP端点。 API密钥也不太理想(不知道谁是客户端,没有范围),但是是一个简单的选择。

在你的情况,我建议使用JSON服务帐户密钥和环境变量,但它值得读官方authentication guide

+0

您对使用服务帐户的建议很奏效,但是您能否详细说明“...然后用URL末尾的?key = api-key命中HTTP端点? 我已经成功地在谷歌云控制台中生成了一个API密钥,现在我应该去我的终端并改变一些东西?或者这是一个Python设置? – Lee88

+1

@ Lee88 api密钥的使用方式是在按照我描述的方式敲击HTTP/REST端点时将api密钥添加为URL参数。例如,您可以使用常规HTTP客户端程序包(如请求来击中端点并将API密钥设置为URL参数)。但是,通常你会使用Pyton客户端库。如果你使用的是google-api-python-client(旧的通用目录),你可以在service.build()中使用developerKey = api-key参数。如果你使用google-cloud-python(现代客户端),它不支持API密钥。为什么?因为API密钥并不是真正的好主意,所以他们很沮丧。 –

+0

如果您获得最好的服务帐户来坚持使用它们,因为它们拥有最细致的访问控制,并且最不可能让您头疼。如果你只是乱搞curl或什么的,API密钥是最有用的。 –