1

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

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

我试过这个代码:如何找到 iPhone 的 IP 地址。但这会返回本地 IP 地址。

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

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

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

4

2 回答 2

6

**编辑 06/29/16: ** 我已经更新了 API 的 URL,因为旧的不再起作用了。

您可以使用: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

于 2012-12-09T14:49:32.007 回答
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];
于 2012-12-09T14:47:50.617 回答