Guias

Adicione geolocalização no servidor a um app Node ou PHP

Na maioria dos casos de uso, entre eles personalização, valores padrão e analytics, a geolocalização pertence ao servidor, já que não depende de nenhuma cooperação do navegador do visitante nem de nenhum script rodando no lado do cliente.

A requisição em si

Independentemente da linguagem, a chamada é a mesma requisição HTTP GET simples para /v1/ip, com a chave enviada em um cabeçalho.

GET /v1/ip?ip=203.0.113.60
X-API-Key: mg_live_examplekey123
{
  "status": "ok",
  "ip": "203.0.113.60",
  "version": 4,
  "found": true,
  "country": "Netherlands",
  "country_code": "NL",
  "region": "North Holland",
  "city": "Amsterdam",
  "postcode": "1012",
  "lat": 52.3702,
  "lon": 4.8952,
  "timezone": "Europe/Amsterdam",
  "asn": 3344,
  "org": "Example ISP"
}

Em um app PHP

Obtenha o endereço do visitante a partir da requisição, normalmente $_SERVER['REMOTE_ADDR'], passe-o como parâmetro ip e faça a requisição HTTP com o cliente HTTP que o seu ambiente PHP já usa, curl ou uma biblioteca que o encapsula. Como este próprio site é construído em PHP renderizado no servidor, sem JavaScript no lado do cliente, esse padrão se encaixa naturalmente no fluxo normal de renderização de uma página, com os dados de localização disponíveis antes de a marcação da página ser gerada.

Em um app Node

Leia o endereço do visitante a partir do objeto da requisição recebida, geralmente req.socket.remoteAddress ou um cabeçalho definido por um proxy reverso, como X-Forwarded-For, se houver um na frente do seu app, e faça a mesma requisição GET com o cliente HTTP de sua preferência antes de gerar a resposta.

Lidando com um proxy na frente do seu app

Se o seu app fica atrás de um balanceador de carga ou de um proxy reverso, o endereço que o seu código vê diretamente pode ser o do próprio proxy, e não o do visitante. Verifique o cabeçalho de endereço encaminhado que o seu proxy define e passe esse endereço explicitamente como parâmetro ip, em vez de depender do endereço remoto bruto da conexão, que de outra forma geolocalizaria a sua própria infraestrutura em vez do visitante.

O custo da requisição em qualquer caso

A consulta custa a mesma requisição única seja chamada a partir de PHP, de Node ou de qualquer outra linguagem de backend, já que o custo está ligado à requisição que chega à API, e não ao que fez a chamada. Em qualquer linguagem, armazene o resultado em cache durante a sessão para não repetir a consulta em cada página.

A geolocalização no servidor funciona da mesma forma independentemente da linguagem de backend: uma chamada HTTP com o endereço do visitante. As opções completas de autenticação estão na documentação de autenticação, e a lista de campos está na documentação da consulta IPv4.