2013-05-30 156 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 
相關問題