使用NSURLSession使用原始身体发布请求
我在这里卡住了。 下面是我的使用NSURLSession与原始邮政请求的代码。 我得到了响应= NULL,没有错误。
NSString* stringRequest = @"https://chocudan.com/api/shops/by_ids"; NSURL* urlRequest = [NSURL URLWithString:stringRequest]; NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:urlRequest]; request.HTTPMethod = @"POST"; NSString* bodyRequest = @"563c268b84ba489c4729f149"; //I have to tried a base64 convert here but still not work. //request.HTTPBody = [NSData base64DataFromString:bodyRequest]; request.HTTPBody = [bodyRequest dataUsingEncoding:NSUTF8StringEncoding]; NSURLSessionConfiguration* configureSession = [NSURLSessionConfiguration defaultSessionConfiguration]; configureSession.HTTPAdditionalHeaders = @{@"Content-Type" : @"application/json charset=utf-8", @"Content-Lenght" : @"180"}; NSURLSession* session = [NSURLSession sessionWithConfiguration:configureSession]; NSURLSessionDataTask* dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSHTTPURLResponse* respHttp = (NSHTTPURLResponse*) response; if (!error && respHttp.statusCode == 200) { NSDictionary* respondData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; NSLog(@"%@", respondData); }else{ NSLog(@"%@", error); } }]; [dataTask resume];
我必须尝试邮差,一切正常。 这是图片。
预先感谢。
试着改变它
NSArray* bodyArray = @[@"563c268b84ba489c4729f149"] NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bodyArray options:NSJSONWritingPrettyPrinted error:&error]; request.HTTPBody = jsonData;
这对我来说是固定的:
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.HTTPAdditionalHeaders = ["Content-Type" : "text/plain"]
我的原始数据是这样的:
{ "email":"test@gmail.com", "password":"12345678" }
我做的是:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setValue:@"test@gmail.com" forKey:@"email"]; [dict setValue:@"12345678" forKey:@"password"]; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; request.HTTPBody = jsonData;
我猜这不是数据是空的,但respondData
是空的?
那是因为你的服务只用一个对象发送一个数组。 JSONSerialisation通过一个NSDictionary
创build一个NSArray
。 字典有钥匙_id
, contact
等等。
所以是
NSArray* respondData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
BTW
NSHTTPURLResponse* respHttp = (NSHTTPURLResponse*) response;
没有太多的意义,但也没有伤害。
关于你的要求,见mihir的答案。 他是对的。 这样做可以帮助你理解mihir的观点:
NSString* bodyRequest = @"[563c268b84ba489c4729f149]";
但是,这是相当快速和肮脏,但可能会帮助您了解的原则。 一旦理解,你一定会遵循mihir的build议。
如果你想发布原始,param是一个NSString的格式,你只需要这样做:
NSData *param_data = [encry_str dataUsingEncoding:NSUTF8StringEncoding]; murequest.HTTPBody = param_data;
如果我们无法从该响应中获得任何信息,请注意响应序列化器是正确的。 任何额外的设置,请处理它与服务器。