отправка iPhone в Django и проверка CSRF не удалась - PullRequest
3 голосов
/ 13 декабря 2011

Я отправляю запрос POST с IPhone на Django и получаю сообщение «Ошибка проверки CSRF», что я не совсем понимаю.Я пытался найти хорошее решение через Интернет, но не смог.Есть ли простой способ отправить POST в 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);

Ответы [ 2 ]

7 голосов
/ 06 августа 2012

Я ошибаюсь или просто не имеет смысла использовать это в нативном приложении?

В этом случае вы можете просто отключить эту защиту с помощью этого декоратора:

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
  def view_without_csrf_protection(request):
    pass
4 голосов
/ 13 декабря 2011

Обычно это сводится к правильной настройке заголовков.Существует ответ , который уже детализирует это.Соответствующая часть, которая вам нужна, это:

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

См. Связанный ответ для получения подробной информации о получении токена из файлов cookie, для краткости я не скопировал его оттуда.Я действительно не знаю контекст вашего кода, поэтому этот метод поиска может не применяться напрямую.В любом случае, вам нужно каким-то образом получить токен.

Когда у вас есть токен, добавьте заголовок к NSMutableURLRequest.После публикации запроса ошибка должна исчезнуть.

[request addValue:token forHTTPHeaderField:@"X-CSRFToken"];
...