2017-03-01 34 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密鑰是最有用的。 –