IPinfo

De knowledge
Aller à la navigation Aller à la recherche

Si vous désirez n'utiliser que 50 000 requetes par mois, c'est idéal!

On s'inscrit en donnant une simple adresse mail et on récupère un token.

export IPINFO_TOKEN="546425b91c438b"  # c'est un exemple

La requête la plus simple :

curl "ipinfo.io/95.142.161.196?token=$IPINFO_TOKEN"

Donne la localisation de l'IP du serveur hébergeant ce wiki.

{
  "ip": "95.142.161.196",
  "hostname": "xvm-161-196.dc0.ghst.net",
  "city": "Paris",
  "region": "Île-de-France",
  "country": "FR",
  "loc": "48.8534,2.3488",
  "org": "AS203476 GANDI SAS",
  "postal": "75000",
  "timezone": "Europe/Paris"
}

Hé oui je suis hébergé chez Gandi depuis plus de 10 ans et j'en suis très satisfait!

Authentification

Nous avons vu ci-dessus une méthode pour utiliser le token. En fait il y en a trois

# Avec Basic Auth user sans password
$ curl -u $IPINFO_TOKEN: ipinfo.io/95.142.161.196

# Avec Bearer token
$ curl -H "Authorization: Bearer $IPINFO_TOKEN" ipinfo.io/95.142.161.196

# Dans la query
$ curl ipinfo.io/95.142.161.196?token=$IPINFO_TOKEN

Les 3 nous donnent le même "json" en réponse.

Protocoles

Dans le cas ci dessus on ne précise pas le protocole. Par défaut c'est le http qui est utilisé par curl mais o peut également utiliser https.

#HTTP
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
#HTTPS
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196

Les options

IPV4 ou IPV6

IPInfo sait indifféremment traiter des IP V4 ou V6.

#IP V4
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
#IP V6
curl -u $IPINFO_TOKEN: http://ipinfo.io/2001:4b98:dc0:47:216:3eff:feaa:4fe7

C'est toujours le même serveur donc, la même réponse.

Adresse par defaut

Si on ne précise pas une IP c'est l'adresse IP du client telle qu'elle est vue par le serveur qui est utilisée.

curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
curl -u $IPINFO_TOKEN: http://ipinfo.io/

Donnent le même résultat si le client est 95.142.161.196

Filtrage de la réponse

On peut ne demander que certaines informations.

Si la requête globale :

curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196
# Equivalant a la demande explicite 
curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/json

Réponds:

{
  "ip": "95.142.161.196",
  "hostname": "xvm-161-196.dc0.ghst.net",
  "city": "Paris",
  "region": "Île-de-France",
  "country": "FR",
  "loc": "48.8534,2.3488",
  "org": "AS203476 GANDI SAS",
  "postal": "75000",
  "timezone": "Europe/Paris"
}

On peut ne demander que l'un des champs ci-dessus:

curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/country

Nous réponds simplement:

FR

et

curl -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/timezone

un simple :

Europe/Paris

Le "content-type"

IPInfo nous donne un content type qui correspond à notre demande.

curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/
curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/json

Les deux commandes nous renvoient un objet JSON et donc un content-type:

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8

En revanche si on demande un champ spécifique.

curl -i -u $IPINFO_TOKEN: http://ipinfo.io/95.142.161.196/country

Réponds par :

HTTP/1.1 200 OK
content-type: text/html; charset=utf-8

Ce qui est étrange on s'attendrais à avoir un text/plain mais non.

De la même façon on peut lui demander un format spécifique avec, par exemple, une option curl -H "Accept: application/json" sur une requête /country rien n'y fait le serveur IPInfo impose son format.