3

IPhone から Django に POST リクエストを送信すると、「CSRF 検証に失敗しました」というメッセージが表示されますが、これは完全には理解できません。インターネットで良い解決策を見つけようとしましたが、できませんでした。django に POST する簡単な方法はありますか?

これは私のコードです:

   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 に答える