【问题标题】:AfNetworking failure in AFHTTPRequestSerializer when I include spaces in the url当我在 url 中包含空格时,AFHTTPRequestSerializer 中的 AfNetworking 失败
【发布时间】:2014-03-22 18:51:18
【问题描述】:

我有一个 AFNetworking 的 Get 请求,代码是:

NSString *url = /*url*/;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
[manager GET:urlMessage parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {...}

我必须在 url 中包含一些带空格的文本。但如果我这样做,我会出现错误“-[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:] 中的断言失败” 显然,没有空格,我没有任何错误。 您知道如何在 url 中包含空格而不会出错吗? 谢谢。

【问题讨论】:

  • 你能把空格编码成任何特殊字符(比如!@)并在服务器端解码吗?
  • 如何解决这个问题 - 即通过正确编码 URL 组件 - 实际上取决于包含空格的确切 URL 组件。例如,如果这是在查询组件中,那么关于如何完成此操作的答案有很多。因此,请更具体一些并更新您的问题。

标签: ios json afnetworking


【解决方案1】:
ulrString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

它应该可以解决问题。 问候

【讨论】:

  • 这让事情变得更糟,因为百分比编码完整且格式错误的 URL(具有部分不正确编码的 URL 组件的 URL 字符串)不会神奇地使这个格式错误的 URL 正确。
  • 我就是这样解决问题的。谢谢!我不明白是什么问题
【解决方案2】:

试试这个

[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]

您也可以查看这些 - AFPercentEscapedQueryStringKeyFromStringWithEncodingAFPercentEscapedQueryStringValueFromStringWithEncoding

- (NSString*) urlEnocodeString { 

    CFStringRef encodedCFString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                                                                        (__bridge CFStringRef) self, 
                                                                          CFSTR(" "),
                                                                       NULL,
                                                                        kCFStringEncodingUTF8);

    return [[NSString alloc] initWithString:(__bridge_transfer NSString*) encodedCFString];    ;
}

【讨论】:

  • 这让事情变得更糟,因为百分比编码完整且格式错误的 URL(具有部分不正确编码的 URL 组件的 URL 字符串)不会神奇地使这个格式错误的 URL 正确。
  • 正确,编写您的自定义方法以仅对空格进行编码。
  • 因为您的建议未生成正确编码的 URL。即使在最简单的情况下,查询组件的 value 将包含空格,stringByAddingPercentEscapesUsingEncoding: 也不会产生正确编码的 URL。示例:给定一个无效的 URL:@"http://example.com?name=ab cd",经过百分比编码后我们得到:http://example.com?name=ab%20cd,但它应该是:http://example.com?name=ab+cd
【解决方案3】:

不建议在 URL 中使用空格。 无论如何,您必须对您的 URL 进行 URL 编码以替换空格

【讨论】:

  • 为什么不推荐?
【解决方案4】:

对于 iOS 9,这将有效:

目标-C:

[query stringByAddingPercentEncodingWithAllowedCharacters:
        [NSCharacterSet URLQueryAllowedCharacterSet]];

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 2017-11-30
    • 1970-01-01
    • 2021-11-16
    • 2012-11-09
    • 2013-07-26
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多