9

所以我试图将表单数据发布到我同事的网站,以便从我的 iPhone 应用程序登录(简单的用户名和密码)。但是,看来我需要一个 CSRF 令牌才能发布。我已经对此进行了大量研究,并从我可以从csrftoken cookie(我在这里读到:https ://docs.djangoproject.com/en/dev/ref/contrib/csrf/ )使用 GET获得这个令牌要求。问题是,我不知道如何处理这个 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 相关信息。帮助将不胜感激!

4

2 回答 2

0

正如评论中所指出的,您可以从包含您朋友网站上的表单的任何页面解析它。

如果您想要一个自己的,请他在以下位置渲染此模板/ios/

ios.html:

{% csrftoken %}

然后启动GET 请求:2 您可以使用正则表达式解析令牌的值:

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

最后,您必须X-CSRFToken在以下 HTTP POST 请求中设置值。

于 2015-05-24T07:37:39.820 回答
0

为了使用令牌登录(POST),当然您必须先获取 CSRF 令牌,就像您说的那样。如果您首先对登录页面进行 GET 调用(在您跟进 POST 之前),登录页面的结果将返回一个 csrf_token 如果您使用浏览器(打开开发人员工具窗格),您可以看到它,然后查看在响应内容下的网络窗格中查看服务器设置的 csrftoken cookie。就我而言:

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

从响应中解析出来后,设置一个标题,如:

X-CSRFToken: "PgQEgY3LAynbVeWRIzXoo2VFRLfd8Uqt" 

在您的 POST 中使用登录名/密码信息。高温高压

于 2016-11-11T19:04:08.710 回答