OAuthUtil.GetAccessToken的代理
我已经设置了一个功能完善的应用程序(在VB中),允许用户访问他的谷歌表单 该应用程序遵循Google的OAuth文档,在web浏览器中显示登录对话框,获取用户权限和访问代码,使用访问代码获取访问令牌,然后使用Google Sheet的查询服务获取Google Sheets。很简单。很好 问题发生在定义了internet代理的计算机上。在我的应用程序的其余部分和大多数GoogleSheetsAPI中,我可以定义一个手动internet代理。GData的RequestFactory允许手动配置代理服务器。据我目前所知,唯一不支持的代码行是用于获取访问令牌的OAuthUtil库。它不允许定义internet代理服务器,因此无法解析代理环境后面的计算机上的主机。以下是我的伪代码:OAuthUtil.GetAccessToken的代理,oauth,proxy,google-api,gdata,wine,Oauth,Proxy,Google Api,Gdata,Wine,我已经设置了一个功能完善的应用程序(在VB中),允许用户访问他的谷歌表单 该应用程序遵循Google的OAuth文档,在web浏览器中显示登录对话框,获取用户权限和访问代码,使用访问代码获取访问令牌,然后使用Google Sheet的查询服务获取Google Sheets。很简单。很好 问题发生在定义了internet代理的计算机上。在我的应用程序的其余部分和大多数GoogleSheetsAPI中,我可以定义一个手动internet代理。GData的RequestFactory允许手动配置代理服
Dim parameters As New OAuth2Parameters
parameters.ClientId = CLIENT_ID
parameters.ClientSecret = CLIENT_SECRET
parameters.RedirectUri = REDIRECT_URI
parameters.Scope = SCOPE
>>Show browser window and obtain access code
parameters.AccessCode = login.Token
OAuthUtil.GetAccessToken(parameters) '<< Point of failure
Dim requestFactory As GOAuth2RequestFactory = New GOAuth2RequestFactory(Nothing, My.Application.Info.ProductName, parameters)
requestFactory.Proxy = GetProxySettings() '<< my code for defining proxy
myService = New SpreadsheetsService("Application")
myService.RequestFactory = requestFactory
Dim参数作为新的OAuth2参数
parameters.ClientId=客户端ID
parameters.ClientSecret=CLIENT\u SECRET
parameters.RedirectUri=重定向\u URI
parameters.Scope=Scope
>>显示浏览器窗口并获取访问代码
parameters.AccessCode=login.Token
OAuthUtil.GetAccessToken(参数)“我已经弄明白了。“OAuthUtil.GetAccessToken”只使用系统定义的代理。没有办法像RequestFactory支持那样手动定义internet代理。因此,有一个使用WebClient的解决方案:
Try
'// Get access token from code
Using WC As New WebClient
' Define proxy
WC.Proxy = GetProxySettings()
' Set parameters
WC.Headers(HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
' Get response
Dim postURL = "https://www.googleapis.com/oauth2/v4/token"
Dim postParams = "code=" & parameters.AccessCode &
"&client_id=" & Uri.EscapeDataString(CLIENT_ID) &
"&client_secret=" & Uri.EscapeDataString(CLIENT_SECRET) &
"&redirect_uri=" & Uri.EscapeDataString(REDIRECT_URI) &
"&grant_type=authorization_code"
Dim responsebody As String = WC.UploadString(postURL, postParams)
' Read response
Dim jObj As JObject = JsonConvert.DeserializeObject(responsebody)
' Store token
parameters.AccessToken = jObj("access_token").ToString
parameters.RefreshToken = jObj("refresh_token").ToString
parameters.TokenType = jObj("token_type").ToString
parameters.TokenExpiry = Now().AddSeconds(CDbl(jObj("expires_in").ToString))
End Using
Catch ex As Exception
MsgBox("Error obtaining access token: " & ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try