2012-10-05 79 views
1

我在寫一個需要將數據發送到Django站點的VB.NET程序,但該站點受密碼保護。因此我需要先登錄。我現在使用的代碼是:使用POST請求登錄到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() 

這是從網絡服務器返回403錯誤,不幸的是我不知道如何解決它。我認爲這可能是csrf失敗,或者我可能會格式化我的POST數據錯誤。任何幫助,將不勝感激。

+1

我猜你對csrf是正確的,但你的數據看起來也很有趣。我認爲用戶名和密碼之間應該有一個逗號。要做到這一點很簡單,就是在Firefox上使用篡改等工具,並且在真正的用戶登錄時準確查看發佈的內容。但是,我仍然認爲在沒有CSRF的情況下您會遭到拒絕。 –

回答

2

聽起來像CSRF保護給我。 Django的CSRF文檔是在這裏:

the How It Works section,你的POST請求都需要沿着CSRF令牌傳遞和CSRF的cookie。

如果您向登錄頁面發出GET請求,您應該能夠從HTML源代碼獲取令牌。我猜你還可以訪問cookie?

+0

如果這很簡單,那麼CSRF就沒有意義了。 –

+0

@BurhanKhalid:呃,我知道我錯過了一些明顯的東西。相應地重寫。 –

+0

感謝您的答案保羅。我建立了我的網站來拉取登錄頁面的源代碼,並且刪除了這個值非常簡單,所以我得到了類似於「name ='csrfmiddlewaretoken'value ='的字符串。追加到我的數據變量? – Morag