---
highlight: a11y-dark
最近公司有个项目,使用了YTKNetwork 发送post 请求 body是加密的字符串,然后发现,最后发送出去的时候,被AfNetwork 转码了
发现YTKNetworkAgent没有暴露对应的设置方法 解决策略,新建YTKNetworkAgent分类,重写- (AFHTTPRequestSerializer *)requestSerializerForRequest:(YTKBaseRequest *)request
具体如下
#import "YTKNetworkAgent+MyYTKNetworkAgent.h"
#if __has_include(<AFNetworking/AFHTTPSessionManager.h>)
#import <AFNetworking/AFHTTPSessionManager.h>
#else
#import <AFNetworking/AFHTTPSessionManager.h>
#endif
**@implementation** YTKNetworkAgent (MyYTKNetworkAgent)
\
- (AFHTTPRequestSerializer *)requestSerializerForRequest:(YTKBaseRequest *)request {
AFHTTPRequestSerializer *requestSerializer = **nil**;
**if** (request.requestSerializerType == YTKRequestSerializerTypeHTTP) {
requestSerializer = [AFHTTPRequestSerializer serializer];
[requestSerializer setQueryStringSerializationWithBlock:^NSString * **_Nullable**(NSURLRequest * **_Nonnull** request, **id** **_Nonnull** parameters, NSError * **__autoreleasing** **_Nullable** * **_Nullable** error) {
**return** parameters;
}];
} **else** **if** (request.requestSerializerType == YTKRequestSerializerTypeJSON) {
requestSerializer = [AFJSONRequestSerializer serializer];
}
\
requestSerializer.timeoutInterval = [request requestTimeoutInterval];
requestSerializer.allowsCellularAccess = [request allowsCellularAccess];
\
// If api needs server username and password
NSArray<NSString *> *authorizationHeaderFieldArray = [request requestAuthorizationHeaderFieldArray];
**if** (authorizationHeaderFieldArray != **nil**) {
[requestSerializer setAuthorizationHeaderFieldWithUsername:authorizationHeaderFieldArray.firstObject
password:authorizationHeaderFieldArray.lastObject];
}
\
// If api needs to add custom value to HTTPHeaderField
NSDictionary<NSString *, NSString *> *headerFieldValueDictionary = [request requestHeaderFieldValueDictionary];
**if** (headerFieldValueDictionary != **nil**) {
**for** (NSString *httpHeaderField **in** headerFieldValueDictionary.allKeys) {
NSString *value = headerFieldValueDictionary[httpHeaderField];
[requestSerializer setValue:value forHTTPHeaderField:httpHeaderField];
}
}
**return** requestSerializer;
}
**@end**