2009-08-23 7 views
35

Dies ist eine wirklich einfache Frage, aber ich kann nirgends eine Erwähnung finden.Erhalten Sie die IP-Adresse des Kunden in Sinatra?

Wie bekomme ich die IP-Adresse des Kunden aus Sinatra?

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

Err, oh, es ist in '@env [ 'REMOTE_ADDR']' - ich '@ env.inspect' Ausgang geprüft hatte durch Suche nach "127.0.0.1", aber es zeigte die IPv6 ':: 1'-Adresse, also habe ich es verpasst ... Jeder kann das gerne posten, damit ich es ohne die 48 Stunden Wartezeit annehmen kann !: P) – dbr

Antwort

64

Sinatra bietet eine request object, die die Schnittstelle zu den Clientanforderungsdaten ist, die Sie verwenden sollten.

Mit request.ip ist die bevorzugte Methode der Client-IP-Adresse zu finden:

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

Es sollte darauf hingewiesen werden, dass 'Request # ip'-Methode stammt Rack, nicht aus Sinatra. – skalee

17

ich kam die Antwort sowieso .. so schreiben:

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

Sinatra die Rack::Request API verwendet, so können Sie eine Menge Dinge in sie verwenden.
Auch ein Link zu der Sinatra doc's.

+2

Hm, die Rack :: Request-API erwähnt eine 'ip'-Methode, die auch' HTTP_X_FORWARDED_FOR' behandelt, gibt es eine Möglichkeit, diese von Sinatra aus aufzurufen? – dbr

+1

sollten Sie nur # {@env ['HTTP_X_FORWARDED_FOR']} tun können. Ich habe das aber noch nie getestet, also bin ich nicht positiv. –

+6

können Sie request.ip auch direkt ausführen. bekomme "/" zu tun; "Ihre IP: # {request.ip}"; Ende – bantic