与NSURLConnection相关的问题
今天,我遇到了NSURLConnection
的问题。我想下载URL http://api.wunderground.com/api/fs3a45dsa345/geolookup/q/34.532900,-122.345.json
的内容。如果我只是将网址粘贴到Safari中,我会得到正确的回复。但是,如果我使用NSURLConnection
做同样的事情,则会收到“找不到”答复。这里是我使用的代码:与NSURLConnection相关的问题
NSURL *requestURL = [[NSURL alloc] initWithString:@"same url as above"];
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:requestURL];
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest
delegate:self
startImmediately:YES];
这里有什么问题?
确保您通过发送一个stringByAddingPercentEscapesUsingEncoding:
消息逃逸URL字符串中的任何特殊字符,例如:
NSString *s = [@"some url string" stringByAddingPercentEscapesUsingEncoding:NSUTFStringEncoding];
NSURL *requestURL = [NSURL URLWithString:s];
编辑
原来的Web服务请求失败因为默认情况下,用户代理标头不会被设置。要设置它,使用的NSMutableURLRequest
的实例,而不是NSURLRequest
创建请求,如下图所示:
NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myURL];
[myRequest setValue:@"My App" forHTTPHeaderField:@"User-Agent"];
委托代码在哪里?对于异步NSURLConnection
,需要有一个delegate
方法来接收返回的数据。其他选项包括sendSynchronousRequest
:或者如果它必须是异步包装sendSynchronousRequest
在GCD block
。
它的实现,但我离开它,因为它工作正常(网站返回一个HTML页面,上面写着“未找到”)。 – ryyst
也不起作用(该方法不会改变字符串)。我也使用了其他网址编码技术,但都没有工作。 – ryyst
感谢您的编辑,它现在的作品!我可以问你是如何发现这一点的? – ryyst