2016-02-06 13 views
5

私はx-www-form-urlencoded本体でデータを投稿しようとしています。郵便配達経由 投稿は、それが Posting via postman, it is okAFNetworking 3 x-www-form-urlencoded投稿データ

OKですが、私はここで3をafnetworking経由でそれを行うカント私のコードは私がこれを正しく行う方法を理解するのに役立ち、

NSDictionary *parameters = @{@"login" : email, 
          @"password": password}; 

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters 
                options:0 
                error:&error]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

self.requestSerializer = [AFJSONRequestSerializer serializer]; 

NSString *urlString = [NSString stringWithFormat:@"%@/%@", HTTPBaseRequestURL, appendLoginUrl]; 

NSLog(@"URL %@\njsonString %@", urlString, jsonString); 


[self POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 
    [formData appendPartWithFormData:jsonData name:@"data"]; 
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {   
    onSuccess(responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSString *errorDescription = [NSError serverErrorMessageFromData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]]; 
    NSInteger statusCode = [NSHTTPURLResponse errorCode:(NSHTTPURLResponse*)task.response]; 

    NetworkRequestError *requestError = [[NetworkRequestError alloc] initWithType: 
             (NSHTTPURLResponse*)task.response ? NetworkRequestErrorTypeServerError : NetworkRequestErrorTypeNoConnection 
                     description: 
             (NSHTTPURLResponse*)task.response ? errorDescription : nil]; 
    requestError.statusCode = statusCode; 

    NSLog(@"Error from server: %@, status code = %ld, error type = %lu", requestError.errorDescription, (long)requestError.statusCode, (unsigned long)requestError.type); 
    onFailure(requestError); 
}]; 

してくださいです。ありがとう!

+0

私は同じ問題を抱えていますが、あなたが共有できる答えが見つかりましたか? –

答えて

0

例えば、カスタムヘッダー情報を追加してみてください。

[self.requestSerializer setValue:@" application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type]; 

は、それはあなたのために役立ちたいと考えています。

7

コメント後、私はついにこの答えを見つけました。ここで

NSString *url = [NSString stringWithFormat:@"%@%@",APIBASE,APIUSERENDPOINT]; 

NSDictionary* parametersDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
          username, @"username", 
          password, @"password", 
          nil 
          ]; 

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
    [manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
    manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 

[manager POST:url parameters:parametersDictionary progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"%@",responseObject); 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"%@",error); 
}]; 
+7

なぜ、requestSerializerのコンテンツタイプの値を設定して、シリアライザ全体をまったく新しいものに置き換えることで、再度書き直しましたか? –

+0

これがどうすれば正しい機能になるのだろうか –

0

:ここに私の正しく機能要求は今だ、

[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 

の追加を注意ここで完全なコードです。それは私と一緒に働いた。とても簡単 。

NSDictionary* parametersDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             @"deviceTokenIOS", @"db487c983ebbe7c2fb066d292bb4318175f54ab27b6b9df7871907e1d0ed62ba", 
             @"message", @"Hello Dunglt", 
             nil 
             ]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"db487c983ebbe7c2fb066d292bb4318175f54ab27b6b9df7871907e1d0ed62ba", @"deviceTokenIOS", @"Hello Dunglt", @"message", nil]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 

[manager POST:[NSURL URLWithString:url].absoluteString parameters:dict progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
    NSLog(@"%@", responseObject); 
} 
     failure:^(NSURLSessionTask *operation, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }];}