今天和后台联调接口的,接口要求post方式请求、参数放body
我一开始把参数和值组合成字典,再转成json字符串、最后转成NSData放入body里。
转换成的json字符串如下
报错信息如下:
{ Status Code: 405, Headers {
"Access-Control-Allow-Origin" = (
"*"
);
Allow = (
"GET, HEAD"
);
Connection = (
"keep-alive"
);
"Content-Length" = (
0
);
"Content-Type" = (
"text/html;charset=utf-8"
);
Date = (
"Thu, 12 May 2022 07:26:22 GMT"
);
Server = (
"nginx/1.17.9"
);
"Set-Cookie" = (
"userName=1; Path=/; HttpOnly"
);
} }
找了很久的问题换了几种方法还是报错:
后面通过postman测试接口,发现后台给的json字符串的顺序和我转换成的字符串参数的顺序不一样,所以换成了手动拼接字符串的方式
拼接完后的字符串如下:
接口调用成功。
实在没想到会和字符串里参数的顺序有关。
完成代码如下:
NSString *bodyStr = [NSString stringWithFormat:@"{\"code\":%@,\"inviteCode\":%@,\"method\":\"inviteCode\",\"SID\":\"\"}",@640012040,@640012040];
NSString *paramsStr = [NSString stringWithFormat:@"params=%@",bodyStr];
NSData *body = [paramsStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *urlPath = @"";
NSURL *url = [NSURL URLWithString:urlPath];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:body];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",error.description);
}];
[dataTask resume];