2009-08-23 7 views
35

Ceci est une question très simple, mais je ne trouve aucune mention de cela, n'importe où ..Obtenez l'adresse IP du client dans Sinatra?

Comment puis-je obtenir l'adresse IP du client dans Sinatra?

get '/' do 
    "Your IP address is #{....}" 
end 
+1

Err, oh, il est dans '@env [ 'REMOTE_ADDR']' - J'avais vérifié la sortie 'de @ de env.inspect' en cherchant "127.0.0.1", mais il montrait l'adresse IPv6 ':: 1' donc je l'ai manqué ... N'importe qui ne hésitez pas à poster cela afin que je puisse l'accepter sans l'attente de 48 heures .. (rep libre !: P) – dbr

Répondre

64

Sinatra fournit un request object, qui est l'interface avec les données de demande client que vous devriez utiliser.

L'utilisation request.ip est la méthode préférée pour trouver l'adresse IP du client:

get '/' do 
    "Your IP address is #{request.ip}" 
end 
+1

Il est à noter que la méthode 'Request # ip' vient de Rack, pas de Sinatra. – skalee

17

je rentrais à poster la réponse de toute façon .. si:

get '/' do 
"Your IP address is #{ @env['REMOTE_ADDR'] }" 
end 

Sinatra utilise le Rack::Request API, vous pouvez donc utiliser beaucoup de choses disponibles en elle.
Egalement un lien vers le Sinatra doc's.

+2

Hm, l'API Rack :: Request mentionne une méthode 'ip', qui gère aussi le' HTTP_X_FORWARDED_FOR ', est-ce qu'il y a un moyen de l'appeler depuis Sinatra? – dbr

+1

vous devriez être capable de faire juste # {@env ['HTTP_X_FORWARDED_FOR']} Je n'ai jamais testé cela, donc je ne suis pas positif. –

+6

vous pouvez faire request.ip directement, aussi bien. obtenir "/" faire; "votre adresse IP: # {request.ip}"; fin – bantic

Questions connexes