关于YTKNetwork post请求发送stirng的处理

286 阅读1分钟

--- highlight: a11y-dark

最近公司有个项目,使用了YTKNetwork 发送post 请求 body是加密的字符串,然后发现,最后发送出去的时候,被AfNetwork 转码了

image.png

发现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**