所以我正在尝试将表单数据发布到我同事的网站,以便从我的iPhone应用程序登录(简单的用户名和密码)。但是,似乎我需要一个CSRF令牌才能发布。我已经对此进行了大量研究,并且我可以使用GET请求从csrftoken cookie
(我在此处阅读:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/)获取此令牌。问题是,我不知道这个GET请求到底是做什么的?我从哪里来?
以下是我的帖子请求到目前为止的代码:
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相关信息。非常感谢帮助!
答案 0 :(得分:0)
正如评论中所指出的,您可以从朋友网站上包含表单的任何页面进行解析。
如果您想要自己的一个,请他在/ios/
ios.html:
{% csrftoken %}
然后发布GET request: 2 您可以使用正则表达式解析令牌的值:
NSString *regex = @"csrfmiddlewaretoken\".*?\"\(.*?\)\"";
最后,您必须在以下HTTP POST请求中设置X-CSRFToken
的值。
答案 1 :(得分:0)
为了使用令牌登录(POST),当然你必须首先获得CSRF令牌,就像你说的那样。如果你首先对登录页面进行GET调用(在你跟进POST之前),登录页面的结果将返回一个csrf_token,你可以看到,如果你使用浏览器(使用开放的开发人员工具窗格),看看在响应内容下的网络窗格中,查看服务器设置的csrftoken cookie。就我而言:
X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt"
解析出响应后,设置如下标题:
#If VBA7 Then
Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
Private Declare Function apiGetComputerName Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If
在您的POST中使用登录名/密码信息。 HTH