全局IP地址以编程方式

时间:2012-12-09 14:22:59

标签: iphone objective-c ios

我需要在我的iOS应用中获取全局IP地址。

我搜索了但找不到有关获取全球IP地址的任何帖子。其中大多数是获取本地IP地址。

我尝试了这段代码:How to find IP Address of iPhone。但是这会返回本地IP地址。

对于我的应用,我需要获取网站所示的IP地址,例如:

http://myipaddress.com/show-my-ip-address/http://whatismyipaddress.com/

是否可以通过编程方式获取iOS应用中的全局IP地址?一种选择是使用上述Web服务,但这些网站的响应将是HTML。是否有任何可以返回简单JSON或XML的免费Web服务?

2 个答案:

答案 0 :(得分:6)

** 编辑06/29/16: **我已更新API的网址,因为较旧的网址不再有效。

您可以使用:https://api.ipify.org/?format=text

这是一个简单的字符串。您可以获取responseObject并在应用程序中存储和使用它。我推荐AFNetworking,这是一个简单的调用和返回,你不需要JSON或xml。

NSURL *URL = [NSURL URLWithString:@"http://api-sth01.exip.org/"];
NSString *URLPath = @"?call=ip";

// Start Connection
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:URL];
[httpClient setDefaultHeader:@"Accept" value:@"application/json"];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:URLPath parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
[operation  setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    // SAVE responseObject to your app

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // Failed
    NSLog(@"error: %@",  operation.responseString);

}];

[operation start];

但是如果你想要JSON,你可以使用:https://api.ipify.org/?format=json

答案 1 :(得分:0)

否 - 无法以编程方式严格使用代码检索外部(全局)IP地址。关于使用服务来查看外部IP,我会查看您要解决的问题:解析或抓取您提到的两个站点或CheckIP返回的HTML。

[NSData dataWithContentsOfURL:url]

CheckIP返回的示例如下所示,非常简单,可以使用RegEx轻松获取

<html>
 <head>
  <title>
   Current IP Check
  </title>
 </head>
 <body>
  Current IP Address: 108.66.182.170
 </body>
</html>

编辑: 使用@gmogames答案中的URL,您只需要执行以下操作即可将数据转换为字符串:

NSURL *theURL = [[NSURL alloc] initWithString:@"http://api-sth01.exip.org/?call=ip"];
NSString* myIP = [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:theURL]
                                     encoding:NSUTF8StringEncoding];