我正在尝试在Objective-C中的POST请求上传递两个不同的参数。
第一个参数应放在Header上,而另一个参数应放在Body上。
NSDictionary *headerParams = [NSDictionary dictionaryWithObjectsAndKeys:
@"password", @"grant_type",
@"write", @"scope", nil];
NSDictionary *bodyParams = [NSDictionary dictionaryWithObjectsAndKeys:
username, @"username",
password, @"password", nil];
AFHTTPRequestSerializer *r = [AFHTTPRequestSerializer serializer];
NSError *error = nil;
NSData *requestBody = [NSKeyedArchiver archivedDataWithRootObject:bodyParams];
NSMutableURLRequest *request = [r requestWithMethod:@"POST" URLString:urlString parameters:headerParams error:&error];
[request setValue:[NSString stringWithFormat:@"application/json,application/x-www-form-urlencoded"] forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded"] forHTTPHeaderField:@"ContentType"];
[request setHTTPBody: requestBody]; //--> If I comment this, the headerParams doesn't removed
如果我使用以下语句调试上述代码:
po [[NSString alloc] initWithData: request.HTTPBody encoding:4]
我得到了nil
。但是当我省略[request setHTTPBody: requestBody];
部分时,我得到了headerParams
的值。我想同时获得headerParams
和bodyParams
的价值。怎么了?感谢。
答案 0 :(得分:1)
查看有关parameters
参数的documentation for AFHTTPRequestSerializer:
<强>参数强>
要将参数设置为GET请求的查询字符串,或请求HTTP正文。
您认为将转到请求标题的字典实际上会转到它的正文。来自代码最后一行的setHTTPBody:
调用将覆盖此值。
如果您希望第一个headerParams
字词转到请求标头,则需要使用setValue:forHTTPHeaderField:
。