2009-08-23 13 views
35

Esta es una pregunta realmente simple, pero no puedo encontrar ninguna mención de esto en ningún lado ..Obtener la dirección IP del cliente en Sinatra?

¿Cómo obtengo la dirección IP del cliente en Sinatra?

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

Err, oh, es en '@env [ 'REMOTE_ADDR']' - Me había registrado la salida de 'env.inspect' @ buscando "127.0.0.1", pero mostraba la dirección IPv6 ':: 1', así que me lo perdí ... Alguien puede publicarlo para que pueda aceptarlo sin esperar 48 horas ... (Representación gratuita !: P) – dbr

Respuesta

64

Sinatra proporciona un request object, que es la interfaz para los datos de solicitud del cliente que debe utilizar.

Usando request.ip es el método preferido para encontrar la dirección IP del cliente:

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

Cabe señalar que 'Método de petición # ip' proviene de Rack, no de Sinatra. – skalee

17

que iba a venir a publicar la respuesta de todos modos .. así:

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

Sinatra utiliza el Rack::Request API, lo que puede utilizar una gran cantidad de cosas disponibles en ella.
También un enlace al Sinatra doc's.

+2

Hm, la solicitud de API rack :: menciona un método 'ip', que se encarga de la' HTTP_X_FORWARDED_FOR' así, ¿hay una manera de llamar esto desde Sinatra? – dbr

+1

debería poder hacer # {@env ['HTTP_X_FORWARDED_FOR']}. Pero nunca lo he probado, así que no estoy seguro. –

+6

puedes hacer request.ip directamente, también. conseguir hacer; "su IP: # {request.ip}"; terminar – bantic

Cuestiones relacionadas