#ip-address #ip #client-ip #api-client #api-bindings #api

ip-api-client

The client (based on ip-api.com api) allows you to get information about the IP address

7 unstable releases

0.5.1 Mar 8, 2024
0.5.0 Mar 8, 2024
0.4.2 Jun 6, 2023
0.4.1 Dec 3, 2022
0.2.0 Apr 4, 2022

#1948 in Network programming

Download history 2/week @ 2024-09-17 33/week @ 2024-09-24

144 downloads per month

MIT license

36KB
663 lines

IP API Client

The client (based on ip-api.com api) allows you to get information about the IP address

Usage

Add to project

[dependencies]
ip-api-client = "0.5.1"
tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"], default-features = false }

Write some Rust

use ip_api_client as Client;
use ip_api_client::{IpApiLanguage, IpData};

#[tokio::main]
async fn main() {
  // You can
  // `generate_empty_config` (to create your own config from scratch)
  // `generate_minimum_config` (that includes only important fields)
  // `generate_maximum_config` (that includes all fields)
  let ip_data: IpData = Client::generate_empty_config()
          // or `exclude_country` if this field is already included
          // in the generated config
          .include_country()
          // or `exclude_currency` if this field is already included in
          // the generated config
          .include_currency()
          // available languages: de/en (default)/es/fr/ja/pt-Br/ru/zh-CN
          .set_language(IpApiLanguage::De)
          // `make_request` takes
          // "ip"/"domain"/"empty string (if you want to request your ip)"
          .make_request("1.1.1.1")
          .await
          .unwrap();

  println!(
    "{}'s national currency is {}",
    ip_data.country.unwrap(),
    ip_data.currency.unwrap(),
  );

  // If you want to request more than one ip, you can use `make_batch_request`
  let ip_batch_data: Vec<IpData> = Client::generate_empty_config()
          .include_isp()
          // `make_batch_request` takes "IPv4"/"IPv6"
          .make_batch_request(vec!["1.1.1.1", "8.8.8.8"])
          .await
          .unwrap();

  println!(
    "1.1.1.1 belongs to `{}` and 8.8.8.8 belongs to `{}`",
    ip_batch_data.get(0).unwrap().isp.as_ref().unwrap(),
    ip_batch_data.get(1).unwrap().isp.as_ref().unwrap(),
  );
}

Peculiarities

Development Progress

  • Request IP address information with a configuration structure that allows you to customize the requested fields in the request to save traffic.
  • Get information about Ip in different languages
  • Query multiple IP addresses in one HTTP request.
  • Block all requests until the end of the limit if the last request was rate-limited.
  • Ability to cache all responses with automatic removal of old ip-data when the maximum cache size is reached.

License

This library (ip-api-client) is available under the MIT license. See the LICENSE file for more info.

Dependencies

~5–11MB
~126K SLoC