2013-05-30 159 views
0

我有这段代码。它返回一个错误400错误的请求,我找不到原因。谷歌oauth请求上的错误400

在第31行错误(这是它应该得到的回应......

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 = GetToken("code=" & Server.UrlEncode(Page.Request.QueryString("code")) & "&client_id=xxx&client_secret=xxx&grant_type=authorization_code&redirect_uri=" & Server.UrlEncode("http://localhost:61163/Testing/YoutubeAPI.aspx")) 
     'do something with the magical and elusive access_token from this point forward.... 
    End If 
End Sub 
Public Shared Function GetToken(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 

回答

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 
相关问题