【问题标题】:change how AFJSONRequestSerializer encodes JSON更改 AFJSONRequestSerializer 如何编码 JSON
【发布时间】:2023-03-13 03:30:01
【问题描述】:

我正在使用 AFNetworking。 AFHTTPRequestOperationManager requestSerializer 设置为使用 AFJSONRequestSerializer。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager] manager.requestSerializer = [AFJSONRequestSerializer serializer];

具有当前设置的 HTTP 正文: {"key" : "http:\/\/myURL.com\/}

所需的 HTTP 正文: {"key" : "http://myURL.com/}

如何防止/\ 转义?

【问题讨论】:

  • 将字符串转换为NSString 并使用removingPercentEncoding
  • 感谢您为我指明正确的方向@Larme
  • 您很有可能会将字符串中的 与某些工具显示的内容混淆。如果主体应该是 JSON,那么两个主体都绝对等同于 JSON。如果您的服务器以不同的方式解释它们,那么您的服务器代码就会损坏。
  • @gnasher729 你是对的,服务器代码被破坏了这个问题的原因。不幸的是,目前无法修复。

标签: ios objective-c json encoding afnetworking


【解决方案1】:

为了解决这个问题,我继承了 AFJSONRequestSerializer 并覆盖了 requestBySerializingRequest:withParameters:error:

- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request withParameters:(nullable id)parameters error:(NSError *__autoreleasing  _Nullable * _Nullable)error {
    NSURLRequest *myRequest = [super requestBySerializingRequest:request withParameters:parameters error:error];

    NSData *jsonData = myRequest.HTTPBody;

    if (jsonData) {
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

        if (jsonString) {
            NSString *sanitizedString = [jsonString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/" options: NSCaseInsensitiveSearch range: NSMakeRange(0, [jsonString length])];
            NSMutableURLRequest *mutableRequest = [myRequest mutableCopy];
            mutableRequest.HTTPBody = [sanitizedString dataUsingEncoding:NSUTF8StringEncoding];
            myRequest = mutableRequest;
        }
    }

    return myRequest;
}

此代码被发现here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2012-04-22
    • 2014-05-28
    相关资源
    最近更新 更多