Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 从本地计算机对GCP上的服务进行身份验证失败_Python 3.x_Google App Engine_Google Cloud Platform_Python Requests - Fatal编程技术网

Python 3.x 从本地计算机对GCP上的服务进行身份验证失败

Python 3.x 从本地计算机对GCP上的服务进行身份验证失败,python-3.x,google-app-engine,google-cloud-platform,python-requests,Python 3.x,Google App Engine,Google Cloud Platform,Python Requests,我正在尝试进行身份验证,但是python3中的请求库不允许我获取令牌。使用以下代码示例: 如果我在gcp的控制台中使用iPython运行相同的代码,它就可以获取令牌。我可以从我的本地机器上使用它,例如CURL 错误: token_response = requests.get(token_request_url, headers=token_request_headers) File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/

我正在尝试进行身份验证,但是python3中的请求库不允许我获取令牌。使用以下代码示例:

如果我在gcp的控制台中使用iPython运行相同的代码,它就可以获取令牌。我可以从我的本地机器上使用它,例如CURL

错误:

token_response = requests.get(token_request_url, headers=token_request_headers)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='metadata', port=80): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/identity?audience=https://myproject....run.app (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f87f0573370>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))
INFO:werkzeug:127.0.0.1 - - [08/Oct/2020 23:54:14] "GET / HTTP/1.1" 200 -
token\u response=requests.get(token\u request\u url,headers=token\u request\u headers)
get中的文件“/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site packages/requests/api.py”,第76行
返回请求('get',url,params=params,**kwargs)
文件“/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site packages/requests/api.py”,请求中的第61行
return session.request(method=method,url=url,**kwargs)
文件“/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site packages/requests/sessions.py”,请求中的第530行
resp=自我发送(准备,**发送)
文件“/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site packages/requests/sessions.py”,第643行,在send中
r=适配器.send(请求,**kwargs)
文件“/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site packages/requests/adapters.py”,第516行,在send中
raise ConnectionError(e,请求=请求)
requests.exceptions.ConnectionError:HTTPConnectionPool(host='metadata',port=80):url:/computeMetadata/v1/实例/服务帐户/默认值/身份?访问群体超过了最大重试次数=https://myproject....run.app (由NewConnectionError(':未能建立新连接:[Errno 8]提供了节点名或服务名,或未知])引起)
信息:werkzeug:127.0.0.1---[08/Oct/2020 23:54:14]“GET/HTTP/1.1”200-

为什么我不能在本地计算机上运行此程序时建立连接?

如果您的代码基于元数据服务器,它将仅在谷歌云上工作。我昨天回答了,我想,你可以从中得到灵感

您可以使用IAM rest API来生成令牌,而不是使用元数据服务器。就像这样,它在本地和云中工作

代码有点长,我不知道IAM API是否和元数据服务器一样高效


如果您需要详细信息和解释,请随时发表评论

元数据服务器只能从运行在谷歌云中的服务(计算引擎、应用引擎等)访问。您无法从桌面访问元数据服务器(当然IP隧道是个例外)。谢谢@JohnHanley!但我正在本地调试。。在这种情况下,为了开发目的(前端的东西)将所有东西都推到云上似乎需要做很多工作。为什么前端需要访问元数据服务器?可以禁用对元数据服务器的访问。您的代码需要处理这个问题。@JohnHanley否则我如何获取承载令牌?使用谷歌身份验证。您可以使用OAuth 2或服务帐户。
token_response = requests.get(token_request_url, headers=token_request_headers)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/Users/tim/anaconda3/envs/sklearn/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='metadata', port=80): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/identity?audience=https://myproject....run.app (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f87f0573370>: Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'))
INFO:werkzeug:127.0.0.1 - - [08/Oct/2020 23:54:14] "GET / HTTP/1.1" 200 -