我似乎无法理解我在这里做错了什么。
我的代码不断从youtube返回400代码....
If Not Page.Request.QueryString("code") Is Nothing Then
Dim code As String = "code=" & Page.Request.QueryString("code") & "&client_id=myclientid&client_secret=mysecret&redirect_uri=http://localhost:61163/Testing/YoutubeAPI.aspx&grant_type=authorization_code"
Dim request As HttpWebRequest = WebRequest.Create("https://accounts.google.com/o/oauth2/token")
Dim byteData As Byte() = Encoding.UTF8.GetBytes(code)
With request
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = byteData.Length
End With
Dim requestStream As Stream = request.GetRequestStream()
requestStream.Write(byteData, 0, byteData.Length)
requestStream.Close()
Dim WebResponse As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim responseStream As Stream = WebResponse.GetResponseStream()
Dim sb As StringBuilder = New StringBuilder
Using reader As New StreamReader(responseStream, System.Text.Encoding.UTF8)
Dim line As String = reader.ReadLine()
If Not line Is Nothing Then
sb.Append(line)
End If
End Using
End If
错误发生在request.GetRequestStream()...我能在这个阶段弄清楚最好的是谷歌不喜欢我要求但似乎无法找出原因?
(我的客户身份和秘密已被偶然交换....)
答案 0 :(得分:0)
我不确定礼仪在回答我自己的问题时是否正确,但你可能会觉得它很有用。
答案在于内容字符串的URL编码......
所以现在稍微修改了OAuth2的强大功能,我可以从youtube API获得我想要的任何东西:)(虽然不是因为谷歌文档的黑洞兔洞......
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.Request.QueryString("code") Is Nothing Then
Dim Token As String = CodeTrade("code=" & Server.UrlEncode(Page.Request.QueryString("code")) & "&redirect_uri=" & Server.UrlEncode("http://localhost:61163/Testing/YoutubeAPI.aspx") & "&client_id=xxx=&client_secret=xxx&grant_type=authorization_code")
'now i CAN do something with the magical and elusive access_token from this point forward....
End If
End Sub
Public Shared Function CodeTrade(code As String) As String
Dim apiResponse As String
Dim postData As String = code
Dim request As HttpWebRequest = DirectCast(WebRequest.Create("https://accounts.google.com/o/oauth2/token"), HttpWebRequest)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As WebResponse = request.GetResponse()
apiResponse = DirectCast(response, HttpWebResponse).StatusDescription.ToString()
dataStream = response.GetResponseStream()
Dim reader As New StreamReader(dataStream)
Dim responseFromServer As String = reader.ReadToEnd()
reader.Close()
dataStream.Close()
response.Close()
Return responseFromServer
End Function