我正在尝试从https://backpack.tf/获得 OAuth 授权,如开发人员页面中所述:https : //backpack.tf/developer/pages/oauth_grants
这是我的代码:
Imports System.Net
Imports System.IO
Imports System.Text
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim client_id As String = "myclientid"
Dim client_secret As String = "myclientsecret"
Dim resp As String = WebRequestPOST("https://backpack.tf/oauth/access_token", client_id, client_secret)
RichtextBox1.Text = resp
End Sub
Public Function WebRequestPOST(ByVal url As String, ByVal client_id As String, ByVal client_secret As String) As String
Dim wrequest As HttpWebRequest = HttpWebRequest.Create(url)
wrequest.ContentType = "application/x-www-form-urlencoded"
wrequest.Accept = "1.0"
wrequest.Method = "POST"
Dim postData As String = "grant_type=client_credentials&client_id=" & client_id & "&client_secret=" & client_secret & "scope=read write"
Dim postDataByte As Byte() = Encoding.UTF8.GetBytes(postData)
Using Writer As New IO.BinaryWriter(wrequest.GetRequestStream)
Writer.Write(postDataByte)
End Using
Dim wresponse As String = ""
Try
wresponse = New StreamReader(wrequest.GetResponse.GetResponseStream(), Encoding.Default).ReadToEnd
Catch ex As Exception
wresponse = ex.ToString
Return wresponse
End Try
Return wresponse
End Function
End Class
它总是返回“System.Net.WebException:远程服务器返回错误:(401) 未经授权。在 System.Net.HttpWebRequest.GetResponse()”
我尝试了许多不同的方法,例如添加:
wrequest.Headers.Add("Authorization", "myUserToken")
或者:
wrequest.Headers.Add("Authorization", "bearer myUserToken")
(如 reddit OAuth)但结果还是一样
我无法在https://backpack.tf/developer/上找到更多关于它的信息,甚至无法通过阅读 github 中所有现有机器人的代码。
使用 DotNetOpenAuth 库也无济于事
假设您已获得正确/正确的客户端 ID、客户端密码、范围和授权类型值(如果其中任何一个错误,您可能会得到 401 响应,这取决于服务器代码,但我不熟悉)有了这个),您在构建 postdata 正文时确实有错误。
您缺少 scope 参数的“&”分隔符,这将使客户端机密包含范围,这肯定会使客户端机密出错。
. . . "&client_secret=" & client_secret & "&scope=read write"
^
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句