来自 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 请求的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上发送 HTTP POST 请求

http 请求流程 && 5种 IO 模型

iOS14 小部件可以请求主应用程序更新其数据吗?

iOS:没有收到来自 Facebook 应用请求的通知

如何在节点中阻止来自不同来源的发布请求

来自 jQuery.ajax 请求的 403 Forbidden 响应与 PhoneGap 桌面