oauth2.0 如何配置到GCP服务的HTTP连接以使用代理?

nqwrtyyt  于 2023-05-05  发布在  其他
关注(0)|答案(1)|浏览(163)

我的Python应用程序需要与两个Google Cloud Platform服务建立连接:Google Groups和BigQuery。连接到前者需要使用代理,但不允许使用该代理连接到后者。
因此,我不想在执行脚本之前或脚本执行期间将代理设置为环境变量,而是专门为连接到Google Groups设置代理。
不知何故,虽然第一种方法有效(证明这不是代理问题),但第二种方法无效,无法找到oauth2服务来授权连接。
下面的示例旨在列出我们组织中的组。按照this issue of the google-api-python-client project中的描述建立连接。

import googleapiclient.discovery
import google_auth_httplib2
from google.oauth2 import service_account
from httplib2 import ProxyInfo, Http, socks
from urllib.parse import urlencodeenter code here

CLOUD_IDENTITY_SERVICE_NAME = 'cloudidentity'
CLOUD_IDENTITY_API_VERSION = 'v1'
SCOPES = [
    'https://www.googleapis.com/auth/cloud-identity.groups'
]

proxy = ProxyInfo(
    proxy_type=socks.PROXY_TYPE_HTTP,
    proxy_host='http://proxy.local',
    proxy_port=99999
)
http = Http(proxy_info=proxy)
    
credentials = service_account.Credentials.from_service_account_file(
    filename=_PATH_TO_CREDENTIALS,
    scopes=SCOPES
)

authorized_http = google_auth_httplib2.AuthorizedHttp(
    credentials,
    http
)

service = googleapiclient.discovery.build(
    CLOUD_IDENTITY_SERVICE_NAME,
    CLOUD_IDENTITY_API_VERSION,
    http=authorized_http
)

query_params = urlencode({
    'page_size': 1000,
    'page_token': ''
})

request = service.groups().list(parent=f'customers/{_CUSTOMER_ID}')
request.uri += '&' + query_params
response = request.execute()

但执行失败,并出现以下错误:Unable to find the server at oauth2.googleapis.com
代理按预期工作,因为在运行脚本之前在服务器中设置代理时,脚本会检索组数据:export HTTP_PROXY=http://proxy.local:99999

w9apscun

w9apscun1#

ProxyInfoproxy_host参数需要在没有协议的情况下指定。因此,将http://proxy.local更改为proxy.local解决了这个问题。

相关问题