AFNETSWORKINGのJSON投稿のエラーをどのように見ていますか?
-
22-12-2019 - |
質問
AFNetWorking 2.0 - AFHTTPSessionManager iエラーメッセージが見つから可能な場所がわかりません。
これは私の設定です:
-(id)init
{
if ((self = [super init])) {
NSURL *url = [NSURL URLWithString:DebugURLString];
self.session = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
self.session.requestSerializer = [AFJSONRequestSerializer serializer];
self.session.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
}
return self;
}
-(void) login:(NSString *)email pwd:(NSString *)pwd result:(void(^)(NSError* result))handler
{
NSDictionary *params = @{@"username": email, @"password":pwd};
[self.session POST:@"auth/api-token/" parameters:params
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@", responseObject);
handler(nil);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", task);
NSLog(@"%@", error.userInfo);
handler(error);
}];
}
.
コール http://www.django-rest-framework.org / API-GUIDE /認証#tokenauthentication 、ユーザー名とパスワードを要求し、トークンを返すrest_framework.authtoken.views.obtain_auth_token
。
ユーザー/パスが正しい場合、この機能は大丈夫です。しかし、そうでなければ私は取得します:
error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey]
<NSHTTPURLResponse: 0xb388f20> { URL: http://localhost:8000/auth/api-token/ } { status code: 400, headers {
Allow = "POST, OPTIONS";
"Content-Type" = "application/json";
Date = "Sat, 11 Jan 2014 02:14:13 GMT";
Server = "WSGIServer/0.1 Python/2.7.5";
Vary = "Accept, Cookie";
} }
.
しかし、Python +リクエストで同じ電話をかけると、
{u'non_field_errors': [u'Unable to login with provided credentials.']}
.
しかし、私はそれをNSError
に見つけません。
また、responseSerializer
を設定したにもかかわらず、タスクに報告します。
(lldb) po task.response
<NSHTTPURLResponse: 0xb388f20> { URL: http://localhost:8000/auth/api-token/ } { status code: 400, headers {
Allow = "POST, OPTIONS";
"Content-Type" = "application/json";
Date = "Sat, 11 Jan 2014 02:14:13 GMT";
Server = "WSGIServer/0.1 Python/2.7.5";
Vary = "Accept, Cookie";
.
JSON 1の代わりに。修正する必要があるの?
解決
AFNetworking
v2の quirk を押す - デフォルトでは、応答本体は障害ブロックに渡されません。 詳細については、GitHubのディスカッションを確認してください。
あなたの質問 GitHub問題(上記と同じ)。 ブログ投稿と例のサブクラスを持つレポ。
私はそれを助けてくれることを願っています。
AFNetworking
V2は素晴らしいです。この動作は、採用時の奇妙さでした。私の最初の思考は「これは正しいことがない」でしたが、私は根本的な推論はあなたがあなた自身の応答シリアライザを作成するためにがであることです。出荷された例はかなり軽量です。それはあなた自身のものを創造するのは簡単で、応答シリアライザはネットワーク関連ロジックをあなたのアプリケーションに戻って終わるネットワーク関連ロジックをカプセル化するのに良い場所です。
所属していません StackOverflow