2011-09-28 95 views
0

今天,我遇到了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]; 

这里有什么问题?

回答

2

确保您通过发送一个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"]; 
+0

也不起作用(该方法不会改变字符串)。我也使用了其他网址编码技术,但都没有工作。 – ryyst

+0

感谢您的编辑,它现在的作品!我可以问你是如何发现这一点的? – ryyst

0

委托代码在哪里?对于异步NSURLConnection,需要有一个delegate方法来接收返回的数据。其他选项包括sendSynchronousRequest:或者如果它必须是异步包装sendSynchronousRequestGCD block

+0

它的实现,但我离开它,因为它工作正常(网站返回一个HTML页面,上面写着“未找到”)。 – ryyst