3

我从 iPhone 向 Django 发送 POST 请求并得到“CSRF 验证失败”,我无法完全理解。我试图通过互联网找到一个好的解决方案,但我不能。有什么简单的方法可以发布到 django 吗?

这是我的代码:

   NSString *post =[NSString stringWithFormat:@"s=aaa&r=k&c=gg"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:(@"http://localhost:8000/messages/views/")]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(data);
4

2 回答 2

7

我错了还是在本机应用程序上使用它没有意义?

在这种情况下,您可以使用此装饰器禁用此保护:

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
  def view_without_csrf_protection(request):
    pass
于 2012-08-06T18:10:24.890 回答
4

通常这归结为正确设置标题。有一个答案已经详细说明了这一点。您需要的相关部分是:

xhr.setRequestHeader("X-CSRFToken", token)

有关从 cookie 获取令牌的详细信息,请参阅链接的答案,为简洁起见,我没有从那里复制它。我真的不知道您的代码的上下文,因此这种检索方法可能不会直接适用。无论如何,您需要以某种方式获取令牌。

获得令牌后,将标头添加到NSMutableURLRequest. 发布请求后,错误应该消失了。

[request addValue:token forHTTPHeaderField:@"X-CSRFToken"];
于 2011-12-13T10:51:31.927 回答