IPinfo
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.