ios iOS开发

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;
}

以上这种改法只是凭着感觉改的!实现这个需求肯定在这里改!但是有没有改全后面会一直实验的!有什么新的问题再更新!暂时没有问题。只是记录一下。

上一篇下一篇

猜你喜欢

热点阅读