上传json数据到服务器

860 阅读1分钟

项目常遇到一种情况,接口在postman上请求成功,在客户端请求失败

在postman请求的结果

在客户端请求结果

其实这种情况让后端同事看一下,或者他后端同事调整一下就好了。但是如果遇到的是外包,后端不是自己人,而且不愿意配合你的话那只能自己摸索,痛苦。

询问了一下安卓的同事,他那边可以请求成功,原因是要将参数转换成json上传

代码奉上:

WS(ws);
NSMutableDictionary *param = [NSMutableDictionary new];
param[@"phone"] = @"电话号码";

//去掉空格转换成json
NSError *error = nil;
NSData *data = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:&error];

NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSMutableString *mutStr = [NSMutableString stringWithString:jsonStr];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:yourUrl]];
AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
requestSerializer.timeoutInterval = 10;
manager.requestSerializer = requestSerializer;
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer.stringEncoding = NSUTF8StringEncoding;

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:yourUrl]]];
request.HTTPMethod = @"POST";
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSString *postStr = [NSString stringWithFormat:@"%@",mutStr];

[request setHTTPBody:[postStr dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSessionTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;

    if (httpResponse.statusCode == 200) {

        NSString *url = responseObject[@"data"];
        ws.urlStr = url;

        NSURL *URL = [NSURL URLWithString:ws.urlStr];
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL];
        [ws.webView loadRequest:request];

    }else{

    }
}];

[task resume];