NSMutableURLRequest 设置 HttpBody 移除 Header Parameters
NSMutableURLRequest set HttpBody remove the Header Parameters
我试图在 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
的值。怎么了?谢谢。
通过查看关于 parameters
参数的 documentation for AFHTTPRequestSerializer:
parameters
The parameters to be either set as a query string for GET requests, or the request HTTP body.
您认为会转到请求的 headers 的字典实际上会转到它的 body。代码最后一行的 setHTTPBody:
调用将覆盖此值。
如果您希望第一个 headerParams
字典转到请求 headers,您需要使用 setValue:forHTTPHeaderField:
.
我试图在 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
的值。怎么了?谢谢。
通过查看关于 parameters
参数的 documentation for AFHTTPRequestSerializer:
parameters
The parameters to be either set as a query string for GET requests, or the request HTTP body.
您认为会转到请求的 headers 的字典实际上会转到它的 body。代码最后一行的 setHTTPBody:
调用将覆盖此值。
如果您希望第一个 headerParams
字典转到请求 headers,您需要使用 setValue:forHTTPHeaderField:
.