用 DELPHI 代码查询一个 IP 地址的归属地

网上搜了一下资料,发现公开的查询 API 有几个:

1. 新浪的。访问了,没有结果返回;

2. 腾讯的。访问了,返回结果是这个页面已经找不到。

3. 淘宝的,能用。

淘宝的 API 接口:http://ip.taobao.com/service/getIpInfo.php?ip=

这是一个 http 的调用,返回值是 JSON 格式。可以直接用浏览器去访问这个 URL 然后看到返回值。

例子:

http://ip.taobao.com/service/getIpInfo.php?ip=103.45.2.23

返回值是:

{"code":0,"data":{"ip":"103.45.2.23","country":"中国","area":"","region":"广东","city":"东莞","county":"XX","isp":"电信","country_id":"CN","area_id":"","region_id":"440000","city_id":"441900","county_id":"xx","isp_id":"100017"}}

上述 JSON 的格式,用 DELPHI 的代码是可以解析的。

从一个 HTTP 的 URL 获取返回值,最简单的办法是用 Indy 的 TIdHTTP 控件。

例子代码如下:

procedure TFmMain.BtnIPQueryClick(Sender: TObject);
var
  S: string;
  JSONStr: string;
  country, area, region, city: string;
begin
  //EditIP 是输入的要查询的 IP 地址
  S := 'http://ip.taobao.com/service/getIpInfo.php?ip=';

  JSONStr := IdHTTP1.Get(S + EditIP.Text);
  if JSONStr = '' then Exit;

  ParseIPAddressFromTaoBaoJSON(JSONStr, country, area, region, city);
  Memo1.Lines.Add(country + '; ' + area + '; ' + region + '; ' + City);
end;

上述代码中使用了一个专门针对淘宝返回的 JSON 的字符串解析的函数

ParseIPAddressFromTaoBaoJSON

这个函数使用了 TJSONValue 需要 uses System.JSON;

代码如下:

function TFmMain.ParseIPAddressFromTaoBaoJSON(const JSONStr: string; var country,
  area, region, city: string): Boolean;
var
  Obj: TJSONValue;
  AValue: TJSONValue;
begin
  Obj := TJSONObject.ParseJSONValue(JSONStr);

  if Obj is TJSONObject then
  begin
    AValue := TJSONObject(Obj).Values['data'];
  end;


  if AValue is TJSONObject then
  begin
    country := TJSONObject(AValue).Values['country'].ToString;
    area := TJSONObject(AValue).Values['area'].ToString;
    region := TJSONObject(AValue).Values['region'].ToString;
    city := TJSONObject(AValue).Values['city'].ToString;
  end;
end;
这段代码,目前测试通过。日期:2018-6-24.   未来是否能用,得看淘宝的这个服务是否还在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值