2013-05-30 51 views
0

我似乎无法理解我在这里做错了什么。HttpWebRequests从Youtube返回错误

我下面的代码保存返回一个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(发生错误)......我可以在这个阶段找出最佳的是,谷歌没有按不喜欢我所要求的,但似乎无法找出原因?

(我的客户ID和秘密已经顺带swopped ....)

+0

请问,当你冲洗你写的吗? –

+0

嗨Wiktor的刚过请求流它帮助..恐怕我在深水区游泳这里没有我的水翅膀..你是什么意思?:) –

+0

requestStream.Flush()之前关闭() –

回答

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