根据 Inno Setup 中的在线列表检查 IP 地址

Check an IP address against an online list in Inno Setup

我正在使用以下代码获取用户 IP 地址

function GetIp: string;
var
  WinHttpReq: Variant;
begin
    try
      WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
      WinHttpReq.Open('GET', 'http://ipinfo.io/ip', False);
      WinHttpReq.Send;
      Result := Trim(WinHttpReq.ResponseText);
    except
      Log(GetExceptionMessage);
      Result := '8.8.8.8';
    end;
end;

获取用户 IP 地址后,我需要检查该 IP 地址是否已存在于我的在线 JSON 列表中。

谢谢

最简单的解决方案是下载您的 JSON 文本文件并搜索您的 IP 地址。

重用您的代码以使用 HTTP(或更好的 HTTPS)检索文档:

function HttpGet(Url: string): string;
var
  WinHttpReq: Variant;
begin
  WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
  WinHttpReq.Open('GET', Url, False);
  WinHttpReq.Send;
  Result := Trim(WinHttpReq.ResponseText);
end;

然后你可以像这样使用它:

var
  Ip: string;
  List: string;
begin
  try
    Ip := HttpGet('https://ipinfo.io/ip');
    List := HttpGet('https://www.example.com/publicly/available/list.json');

    if Pos('["' + Ip + '"]', List) > 0 then
    begin
      Log(Format('IP %s is in the list', [Ip]));
    end
      else
    begin
      Log(Format('IP %s is not in the list', [Ip]));
    end;
  except
    Log(Format('Error testing if IP is in the list - %s', [GetExceptionMessage]));
  end;
end;

尽管您必须公开您的列表。当前无法访问您的 URL,除非先登录 Google。


如果您想正确处理您的 JSON,请参阅