我试图使用模拟器而非真实设备在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浏览器中运行良好。
答案 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个字符来解释你的问题。