2016-02-06 50 views
5

我想用x-www-form-urlencoded body发布数据。通过邮递员 发帖,它是确定 Posting via postman, it is okAFNetworking 3 x-www-form-urlencoded post data

,但我不能通过afnetworking 3.这里做到这一点是我的代码

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

评论后,我终于找到了答案。这里是我的正常工作的要求,现在,请注意添加

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

下面是完整的代码:

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设置content-type值,然后通过用全新替换整个序列化器来重新编写它? –

+0

我不知道这可能是正确的功能 –

0

这里。它与我合作。太简单 。

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); 
     }];}