2013-05-30 2 views
0

Я не могу понять, что я здесь делаю неправильно.HttpWebRequests Ошибка возврата из Youtube

Мой код ниже продолжает возвращать 400 код из YouTube ....

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() ... лучшее, что я могу понять, на данном этапе является то, что Google Безразлично Мне нравится то, о чем я прошу, но не могу понять, почему?

(My ID клиента и секрет был swopped кстати ....)

+0

ли помочь ему, когда вы Flush потока запроса только после того, как вы пишете в это? –

+0

Hi Wiktor .. Я боюсь, что я плыву в омуте здесь без моих водных крыльев .. что вы имеете в виду? :) –

+0

requestStream.Flush() до Close() –

ответ

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