我的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
。
1条答案
按热度按时间w9apscun1#
ProxyInfo
的proxy_host
参数需要在没有协议的情况下指定。因此,将http://proxy.local
更改为proxy.local
解决了这个问题。