【问题标题】:error 400 on google oauth request谷歌 oauth 请求上的错误 400
【发布时间】:2013-05-30 22:03:15
【问题描述】:

我有这个代码。它返回错误 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

【问题讨论】:

    标签: asp.net youtube-api oauth-2.0


    【解决方案1】:

    我不确定您的代码,但您始终可以使用 YouTube Dotnet client libraries

    这是一个sample application 使用它。

    【讨论】:

    • 感谢易卜拉欣,但找到了答案.. 见下文。该死的谷歌帖子的网址编码:)
    【解决方案2】:

    我不确定在回答我自己的问题时礼仪是否正确,但您可能会发现它很有用。

    答案在于内容字符串的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多