使用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 。 字典有钥匙_idcontact等等。

所以是

 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; 

如果我们无法从该响应中获得任何信息,请注意响应序列化器是正确的。 任何额外的设置,请处理它与服务器。