iOS,AFNetworking网络请求数据格式取消URLEnC
2017-10-12 本文已影响367人
ProgrammerChan
今天做一个新项目发现我post交过去的数据与后台需要的数据不太一样,后台需要的是原封不动的数据格式,用wireShark抓包发现自己post出去的数据是经过了URLEncode过后的,所以需要取消这个URLEncode的处理。让原来发出去的数据什么样子,在网络中就是什么样子。只有修改框架代码。
1.定位到AFURLRequestSerialization.m类。
2.定位到- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)requestwithParameters:(id)parameters
error:(NSError *__autoreleasing *)error方法。
query为传进来的数据,他会在这里面进行一些处理。
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
withParameters:(id)parameters
error:(NSError *__autoreleasing *)error
{
NSParameterAssert(request);
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
if (![request valueForHTTPHeaderField:field]) {
[mutableRequest setValue:value forHTTPHeaderField:field];
}
}];
NSString *query = nil;
if (parameters) {
if (self.queryStringSerialization) {
NSError *serializationError;
query = self.queryStringSerialization(request, parameters, &serializationError);
if (serializationError) {
if (error) {
*error = serializationError;
}
return nil;
}
} else {
switch (self.queryStringSerializationStyle) {
case AFHTTPRequestQueryStringDefaultStyle:
//这里处理的这个数据。
// query = AFQueryStringFromParameters(parameters);
//不用处理就直接赋值了。
query = parameters;
break;
}
}
}
if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
if (query && query.length > 0) {
mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]];
}
} else {
// #2864: an empty string is a valid x-www-form-urlencoded payload
if (!query) {
query = @"";
}
if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) {
//这里也可以修改conten-Type,我用的application/octet-stream,因为大神写的代码不是很看到懂!!所以各种瞎改!原来是表单提交application/x-www-form-urlencoded
[mutableRequest setValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"];
}
//最后把这个数据赋值给请求body
NSLog(@"%@",query);
[mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]];
}
return mutableRequest;
}