我正尝试从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中所有现有bot的代码来找到有关它的更多信息。
使用DotNetOpenAuth库也不帮助我
答案 0 :(得分:0)
假设您具有正确的/正确的客户端ID,客户端机密,作用域和授予类型的值(如果其中任何一个错误,您可能会收到401响应,具体取决于服务器代码,而我我对此并不熟悉),那么在构造postdata正文时确实会出错。
您缺少scope参数的'&'分隔符,这将使客户端密码包含范围,这肯定会使客户端密码错误。
. . . "&client_secret=" & client_secret & "&scope=read write"
^