解析来自 ipregistry 的响应时检查 Inno Setup 中 JSON 对象中的所有值

Checking all values in JSON object in Inno Setup when parsing response from ipregistry

我正在尝试使用 ipregistry IP 地理定位和威胁检测来阻止机器人安装 API。但我得到以下格式的结果。你能帮我将它与 Inno Setup 集成以退出安装程序吗,如果以下任何一项是 true?

API URL https://api.ipregistry.co/50.75.90.218?key=roygrcxz372rjb&fields=security

API 结果

{
    "security": {
        "is_bogon": false,
        "is_cloud_provider": false,
        "is_tor": false,
        "is_tor_exit": false,
        "is_proxy": false,
        "is_anonymous": false,
        "is_abuser": false,
        "is_attacker": false,
        "is_threat": false
    }
}

谢谢

您已经知道如何调用在线API:

您基本上已经知道如何解析 JSON,但是好吧,这有点具体。使用JsonParser library and my functions from ,你可以这样写:

function AllowInstallation(Json: string): Boolean;
var
  JsonParser: TJsonParser;
  JsonRoot, SecurityObject: TJsonObject;
  I: Integer;
begin
  Result := True;
  Log('Parsing');
  if not ParseJsonAndLogErrors(JsonParser, Json) then
  begin
    Log('Cannot parse, allowing installation');
  end
    else
  begin
    Log('Parsed');
    JsonRoot := GetJsonRoot(JsonParser.Output);
    if not FindJsonObject(JsonParser.Output, JsonRoot, 'security', SecurityObject) then
    begin
      Log('Cannot find "security", allowing installation');
    end
      else
    begin
      for I := 0 to Length(SecurityObject) - 1 do
      begin
        if SecurityObject[I].Value.Kind <> JVKWord then
        begin
          Log(Format('"%s" is not "word", ignoring', [SecurityObject[I].Key]));
        end
          else
        if JsonParser.Output.Words[SecurityObject[I].Value.Index] = JWTrue then
        begin
          Log(Format('"%s" is "true", not allowing the installation', [
            SecurityObject[I].Key]));
          Result := False;
        end
          else
        begin
          Log(Format('"%s" is not "true"', [SecurityObject[I].Key]));
        end;
      end;
    end;
  end;
  ClearJsonParser(JsonParser);
end;