AFNETWORKINGとCURLの送信投稿の違い
-
20-12-2019 - |
質問
i VEはしばらくの間成功を収めてAfnetworking 2を使用していましたが、私は頭を変える場所がわからない場合につまずいました。ログインし、資格情報を送信し、稼働状況を返すために資格情報を送信するために投稿要求をしなければなりません。このようなAFNETSWORKING経由で送信するいくつかの奇妙な理由のために:
NSDictionary *params = @{@"login": self.loginField.text, @"password" : self.passField.text};
NSDictionary *data = @{@"data": params};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager POST:server parameters:@{@"data" : params} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}];
.
私は単一の「データ」パラメータとしてパラメータをパラメータでパックする必要があります。私はOK 200を復元しますが、サーバーログを調べると、データが転送されていないことがわかります。
しかし、curl
これに送信された場合:
curl -d 'data={"login":"xx", "password":"yy"}' http://someurl/api/login/
.
私は完全に細かい反応を得て、ログで私はいくつかの実際のデータを見ます。誰かがそのような場合に対処する方法を知っていますか?
それが役立つなら、私は実際の装置でテストされていないiPhoneシミュレータでそれをやっています。
解決
AFNetworking
のソースコード、すなわちクラスAFJSONRequestSerializer
を見ている場合は、そのシリアルザのシリアルはパラメータをボディに引き渡すことができます。/ P>
あなたの場合に afhttpRequestSerializer を使用する必要があります - それはあなたのURLに(URLエンコードされた)HTTPパラメータとしてパラメータを追加します。
あなたの訴訟で働くべきなもの:
// build the JSON parameter string
NSDictionary *params = @{@"login": self.loginField.text, @"password" : self.passField.text};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
options:0
error:&error];
NSString *jsonString = [[NSString alloc] initWithBytes:[jsonData bytes]
length:[jsonData length]
encoding:NSUTF8StringEncoding];
// and now send the JSON parameter string as HTTP parameter
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager POST:server
parameters:@{@"data" : jsonString}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success: %@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error: %@", error);
}];
. 所属していません StackOverflow