2013-01-12 105 views
8

因此,我試圖將表單數據發佈到我的同事的網站,以便從我的iPhone應用程序登錄(簡單的用戶名和密碼)。但是,似乎我需要一個CSRF令牌才能發佈。我已經做了大量的研究,並從我可以從csrftoken cookie(我在這裏閱讀:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/)中使用GET請求獲得該令牌。問題是,我不知道這個GET請求究竟做了什麼?我從哪裏得到?如何在iOS中獲取CSRF令牌?

這是迄今爲止我POST請求的代碼:

NSURL *url = [NSURL URLWithString:SERVER_ADDRESS]; 
NSData* postData= //Some form data 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:[NSString stringWithFormat:@"%d", postData.length] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

[request addValue:token forHTTPHeaderField:@"X-CSRFToken"]; //Where do I get this token from 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request 
                   delegate:self]; 
[connection start]; 

我知道有很多類似的帖子這個StackOverflow上的,但我沒有用,這似乎完全回答中發現的任何。通常它只是引導我到上面的鏈接,其中只填充了AJAX相關信息。幫助將非常感謝!

+1

csrf標記位於cookie中,默認情況下'csrftoken'將在同一會話中的相同視圖中接收。在發佈信息以獲取此Cookie之前,您需要做另一個請求。 – SingleNegationElimination

+1

您是否找到解決此問題的解決方案? –

+1

您好友網站上的任何表單都應在表單中包含令牌。您可以從網站上的任何表單解析html。否則,請他在僅顯示csrf標記的網站上創建一個頁面。 – gcdev

回答

0

正如在評論中指出的,你可以從任何包含你朋友網站上的表單的頁面解析它。

如果你想要一個自己問他在/ios/

ios.html渲染這個模板:

{% csrftoken %} 

然後啓動一個GET request:2 您可以用解析標記的值正則表達式:

NSString *regex = @"csrfmiddlewaretoken\".*?\"\(.*?\)\""; 

最後,你必須設置X-CSRFToken的值在你的下一個翼HTTP HTTP請求。

+0

抓餅乾呢? –

0

爲了用令牌登錄(POST),當然你必須首先獲得CSRF令牌,就像你說的。如果您首先對登錄頁面執行GET調用(然後再執行POST),則登錄頁面的結果將返回一個csrf_token,您可以看到是否使用瀏覽器(通過打開的開發人員工具窗格),然後查看在響應內容的網絡窗格中查看由服務器設置的csrftoken cookie。在我的情況:在登錄/密碼信息的POST

X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt" 

Set-Cookie:csrftoken=PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt; expires=Fri, 10-Nov-2017 18:59:54 GMT; Max-Age=31449600; Path=/; secure 

解析了這一點的響應後,設置像頭。 HTH