iPhone向Django发送POST请求时,出现CSRF验证失败问题。
iPhone向Django发送POST请求时,出现CSRF验证失败问题。
我从iPhone发送了一个POST请求到Django,但是收到了“CSRF verification failed”的错误信息,我无法完全理解这个错误。我尝试在互联网上寻找一个好的解决方案,但是没有找到。有没有一种简单的方法可以向Django发送POST请求?这是我的代码:\n
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);
iPhone发送POST请求到Django并收到CSRF验证失败的错误。出现这个问题的原因是没有正确设置请求头。解决方法是在发送请求时添加一个名为"X-CSRFToken"的请求头,并将CSRF token作为值传递。具体的实现方法如下:
1. 首先需要获取CSRF token。可以参考链接中提供的方法从cookies中获取token。
2. 获取到token后,将其添加到NSMutableURLRequest的请求头中。代码如下:
[request addValue:token forHTTPHeaderField:@"X-CSRFToken"];
需要注意的是,由于不清楚你的代码上下文,上述的token获取方法可能不适用于你的情况,需要根据实际情况进行调整。
关于如何通过GET请求获取token,可以参考Django文档中的相关内容。主要是在一个模板中使用{% csrf_token %}标签来渲染页面。在收到GET请求返回的页面时,提取其中的token,并在后续的POST请求中重复使用。
总结起来,解决这个问题的关键是正确设置请求头,并获取并使用有效的CSRF token。