使用POST请求登录到Django站点

使用POST请求登录到Django站点,django,vb.net,authentication,Django,Vb.net,Authentication,我正在编写一个VB.NET程序,需要将数据发送到Django站点,但该站点受密码保护。因此,我需要先登录。我现在使用的代码是: Dim reqT As HttpWebRequest Dim resT As HttpWebResponse reqT = WebRequest.Create("http://websiteURL/login/") reqT.Method = "POST" Dim Data As String Data = "{""username"":""fakeusername"

我正在编写一个VB.NET程序,需要将数据发送到Django站点,但该站点受密码保护。因此,我需要先登录。我现在使用的代码是:

Dim reqT As HttpWebRequest
Dim resT As HttpWebResponse
reqT = WebRequest.Create("http://websiteURL/login/")
reqT.Method = "POST"

Dim Data As String
Data = "{""username"":""fakeusername""&""password"":""fakepassword""}"
Dim credArray As Byte() = Encoding.UTF8.GetBytes(Data)
reqT.ContentType = "application/x-www-form-urlencoded"
reqT.ContentLength = credArray.Length
Dim dataStreamT As Stream = reqT.GetRequestStream()
dataStreamT.Write(credArray, 0, credArray.Length)
dataStreamT.Close()

这是从Web服务器返回的403错误,不幸的是,我不知道如何修复它。我想可能是csrf失败了,或者我的帖子数据格式有误。任何帮助都将不胜感激。

听起来像是CSRF保护。Django CSRF文件如下:

根据,您的POST请求将需要传递CSRF令牌和CSRF cookie


如果您向登录页面发出GET请求,您应该能够从HTML源获取令牌。我猜你也可以访问cookie?

我猜你对csrf的看法是正确的,但是你的数据看起来也很有趣。我认为用户名和密码之间应该有一个逗号。最简单的方法是在Firefox上使用tamper之类的工具,查看真实用户登录时发布的内容。但是,我仍然认为如果没有CSRF,你会被拒绝。如果是这么简单,那么CSRF就没有意义了。@Burnkhalid:doh,我知道我遗漏了一些明显的东西。相应地重写。谢谢你的回答,保罗。我将我的站点设置为提取登录页面的源代码,剥离该值非常简单,因此我得到了类似“name='csrfmiddlewaretoken'value='''”的内容,我可以将其附加到我的数据变量中吗?我想你也需要读取登录页面返回的CSRF cookie,并将其与你的POST请求一起传递,以及将令牌附加到数据变量。我不熟悉VB.NET,所以我不知道如何向请求中添加cookie。