AFNetworking设置了http主体,但是我的node.js服务器无法恢复正文。
使用NSURLConnection可以正常工作。
//第一步,创建URL
NSURL *testurl = [NSURL URLWithString:@"http://192.168.1.7:1111/xx/xx/xxx"];
//第二步,创建请求
NSMutableURLRequest *testrequest = [[NSMutableURLRequest alloc]initWithURL:testurl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[testrequest setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
NSString *str = @"{'body':{'command':'xxxxx'}}";//设置参数
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[testrequest setHTTPBody:data];
//第三步,连接服务器
NSData *received = [NSURLConnection sendSynchronousRequest:testrequest returningResponse:nil error:nil];
NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
NSLog(@"%@",str1);
afnetworking body不适用于node.js
NSDictionary *body = @{ @"body": @{ @"command": @"xxxx"} };
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
AFURLSessionManager *afmanager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"http://192.168.1.7:1111/xx/xx/xxx"] parameters:nil error:nil];
req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[[afmanager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (!error) {
NSLog(@"Reply JSON: %@", responseObject);
if ([responseObject isKindOfClass:[NSDictionary class]]) {
//blah blah
}
} else {
NSLog(@"Error: %@, %@, %@", error, response, responseObject);
}
}] resume];
Node.js服务器,使用express。
req.on('data', function (chunk) {
body.push(chunk);
});
此图片是查尔斯捕获的数据。看起来像是一样,我无法捕捉十六进制值来比较它们真的不同!!!!
答案 0 :(得分:0)
在node.js端,如果您正在使用body-parser
的JSON请求解析中间件并且检测到“application / json”请求,那么请求的解析内容将在{{1}上可用并且req.body
不会发出任何数据(因为中间件已经消耗了它)。
对于您正在使用的任何中间件未处理的任何其他类型的请求,数据应按预期在req
上提供。