来自 iOS 的 http 请求
Posted
技术标签:
【中文标题】来自 iOS 的 http 请求【英文标题】:http request from iOS 【发布时间】:2014-01-10 10:01:13 【问题描述】:我正在尝试向
发送请求"http://www.geocodefarm.com/api/forward/json/f0e3d8f953e83ca08c1eb487c64f9b3ecc379d5c/530 W Main St Anoka MN 55303 US/"
which returns a JSON.
在我的浏览器中粘贴地址返回一个 JSON,我只是不知道如何在 ios 中做到这一点
我在 AFNetworking 中尝试了以下操作,但返回的是:
Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x14930080
NSUnderlyingError=0x14753ac0 "bad URL", NSLocalizedDescription=bad URL
代码:
url = [NSURL URLWithString:"http://www.geocodefarm.com/api/forward/json/f0e3d8f953e83ca08c1eb487c64f9b3ecc379d5c/530 W Main St Anoka MN 55303 US/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]
initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation , id responseObject)
NSLog(@"%@",responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"%@",error);
// code
];
[operation start];
谢谢
【问题讨论】:
【参考方案1】:您的问题很可能取决于您的网址。 NSURLRequest 中使用的所有 URL 都应该被转义。在使用之前尝试转义您的 URL:
NSString* yourURLString = @"http://www.geocodefarm.com/api/forward/json/f0e3d8f953e83ca08c1eb487c64f9b3ecc379d5c/530 W Main St Anoka MN 55303 US/";
NSString* escapedUrlString =[yourURLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
url = [NSURL URLWithString:escapedUrlString];
【讨论】:
【参考方案2】:使用以下代码进行请求,
NSString *aStr=@"http://www.geocodefarm.com/api/forward/json/f0e3d8f953e83ca08c1eb487c64f9b3ecc379d5c/530 W Main St Anoka MN 55303 US/";
NSString* aStrFinal =[aStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *aUrl=[NSURL URLWithString:aStrFinal];
NSURLRequest *aREquest=[NSURLRequest requestWithURL:aUrl];
[NSURLConnection connectionWithRequest:aREquest delegate:self];
并在以下代码中获得响应,
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
NSMutableDictionary* json = [NSJSONSerialization
JSONObjectWithData:data //1
options:kNilOptions
error:nil];
NSLog(@"json===%@",json);
【讨论】:
【参考方案3】:这样做,
首先,创建一个字符串来存储字符串
NSString *strigURL=[NSString stringWithFormat:@"http://www.geocodefarm.com/api/forward/json/f0e3d8f953e83ca08c1eb487c64f9b3ecc379d5c/530 W Main St Anoka MN 55303 US/"];
为 NSURL 初始化一个对象
NSURL *url=[NSURL URLWithString:strigURL];
请求
NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url];
NSError *error;
NSURLResponse * response;
从响应中收到的数据
NSData * responseData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
编码数据
output=[[NSString alloc]initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"Response : %@",output);
【讨论】:
同步请求不好。每次你使用一只小猫,上帝都会杀死一只小猫。 @Cyrille,请告诉我这会发生什么 整个应用程序将完全冻结,直到解析 DNS 名称、打开连接、向服务器发送请求、服务器处理请求,您的设备接收返回的数据。这可能需要相当长的时间。同步请求永远不是正确的解决方案。 哦,所以我应该使用异步请求 永远,永远。这甚至不应该是一个问题。以上是关于来自 iOS 的 http 请求的主要内容,如果未能解决你的问题,请参考以下文章