iOS http' get'有URL长度限制

时间:2015-02-23 09:56:14

标签: ios objective-c

我试图使用模拟器而非真实设备在iOS(目标C)中进行简单的获取。

    NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:theGetURL]
                                                              cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                          timeoutInterval:10];
    [newRequest setHTTPMethod: @"GET"];

    NSError *requestError2;
    NSURLResponse *urlResponse2;


    NSData *response2 = [NSURLConnection sendSynchronousRequest:newRequest returningResponse:&urlResponse2 error:&requestError2];
    NSString* secondResponse = [[NSString alloc] initWithData:response2 encoding:NSUTF8StringEncoding];

    NSLog(@"error = %@",requestError.localizedDescription);
    NSLog(@"response=%@",secondResponse);
    NSLog(@"url response = %@",urlResponse);

当我传递一个简单的网址时,此代码非常有效。当我尝试使用更长(大约4000个字符)网址的代码时,代码不起作用(不会打印错误)。

我知道有一篇帖子对于这类事情更好,但我的问题是,这是否需要获取请求?

此外,我的网址在我的Mac和iOS浏览器中运行良好。

2 个答案:

答案 0 :(得分:1)

我认为您的网址查询参数可能包含任何未编码的字符。尽力确保它。 对于编码,您可以尝试此代码

- (NSString *)encodeQueryParameter:(NSString *)str
{
    CFStringRef ref = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (__bridge CFStringRef)str,
                                                              NULL,
                                                              CFSTR(":/=,!$&'()*+;[]@#?"),
                                                              kCFStringEncodingUTF8);
    NSString *result = (__bridge_transfer NSString *)ref;
    return result;
}

答案 1 :(得分:0)

正如您所怀疑的那样,我认为您需要考虑转而使用POST而不是GET。服务器端限制为8K,但是对于客户端来说这似乎可以少得多。

以下讨论总结了一切。它似乎暗示Safari的限制是2K,这可能意味着iOS的相同或更少,这可以用4000个字符来解释你的问题。

maximum length of HTTP GET request?