2013-05-30 3 views
0

У меня этот код. Он возвращает ошибку 400 bad request, и я не могу найти причину.ошибка 400 по запросу google oauth

Ошибка в строке 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

Я не уверен, что ваш код, но вы всегда можете использовать YouTube Dotnet client libraries.

Вот sample application используя его.

+0

Спасибо Ибрагим, но нашел ответ .. см. ниже. damn url кодировка iffy google post :) –

0

хорошо я не уверен, что этикет правильно здесь в ответ на мой собственный вопрос, но вы можете найти его полезным, тем не менее.

Ответ лежит на кодировке URL-адреса строки содержимого ...

, так что теперь исправленные изменения в OAuth2 развязаны, и я могу получить практически все, что хочу от API-интерфейса youtube :) (хотя НЕТ благодаря черная дыра в кроличьей дыре документации Google ...

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 
Смежные вопросы