Ios AF3 x-www-form-URL编码邮政数据
我试图用x-www-form-urlencoded body发布数据。 通过邮递员投递,没问题 但是我不能通过AF3来做。这是我的密码Ios AF3 x-www-form-URL编码邮政数据,ios,post,http-post,afnetworking-3,Ios,Post,Http Post,Afnetworking 3,我试图用x-www-form-urlencoded body发布数据。 通过邮递员投递,没问题 但是我不能通过AF3来做。这是我的密码 NSDictionary *parameters = @{@"login" : email, @"password": password}; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:par
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);
}];
NSDictionary*参数=@{@“登录”:电子邮件,
@“密码”:密码};
n错误*错误;
NSData*jsonData=[NSJSONSerialization dataWithJSONObject:参数
选项:0
错误:&错误];
NSString*jsonString=[[NSString alloc]initWithData:jsonData编码:NSUTF8StringEncoding];
self.requestSerializer=[AFJSONRequestSerializer序列化程序];
NSString*urlString=[NSString stringWithFormat:@“%@/%@”,HTTPBaseRequestURL,appendLoginUrl];
NSLog(@“URL%@\njsonString%@”、urlString、jsonString);
[self POST:urlString参数:nil constructingBodyWithBlock:^(id\u Nonnull formData){
[formData appendPartWithFormData:jsonData名称:@“数据”];
}进度:无成功:^(NSURLSessionDataTask*_非空任务,id_可空响应对象){
onSuccess(responseObject);
}失败:^(NSURLSessionDataTask*_可空任务,NSError*_非空错误){
NSString*errorDescription=[NSError serverErrorMessageFromData:(NSData*)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]];
NSInteger statusCode=[NSHTTPURLRRESPONSE errorCode:(NSHTTPURLRRESPONSE*)task.response];
NetworkRequestError*requestError=[[NetworkRequestError alloc]initWithType:
(NSHTTPURLResponse*)task.response?NetworkRequestErrorTypeServerError:NetworkRequestErrorTypeNoConnection
说明:
(NSHTTPURLResponse*)task.response?错误描述:nil];
requestError.statusCode=状态代码;
NSLog(@“来自服务器的错误:%@,状态代码=%ld,错误类型=%lu”,requestError.errorDescription,(long)requestError.statusCode,(unsigned long)requestError.type);
onFailure(请求错误);
}];
请帮助我理解如何正确地做到这一点。谢谢 尝试附加自定义标题信息,例如:
[self.requestSerializer setValue:@" application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type];
希望对您有所帮助。在评论之后,我终于找到了答案。这是我现在正确运行的请求,注意添加了
[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);
}];
在这里。它对我起作用了。太容易了
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);
}];}
我也有同样的问题,你找到了一个可以分享的答案吗?为什么你要为requestSerializer设置内容类型值,然后用一个全新的序列化程序替换整个序列化程序来重写它?