NSMutableURLRequest设置HttpBody删除标题参数

时间:2016-01-12 06:40:24

标签: ios objective-c post request nsmutableurlrequest

我正在尝试在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的值。我想同时获得headerParamsbodyParams的价值。怎么了?感谢。

1 个答案:

答案 0 :(得分:1)

查看有关parameters参数的documentation for AFHTTPRequestSerializer

  

<强>参数
  要将参数设置为GET请求的查询字符串,或请求HTTP正文。

您认为将转到请求标题的字典实际上会转到它的正文。来自代码最后一行的setHTTPBody:调用将覆盖此值。

如果您希望第一个headerParams字词转到请求标头,则需要使用setValue:forHTTPHeaderField: