【问题标题】:Get client's IP address in Sinatra?在 Sinatra 中获取客户端的 IP 地址?
【发布时间】:2010-11-22 02:29:56
【问题描述】:

这是一个非常简单的问题,但我在任何地方都找不到任何提及这一点..

如何从 Sinatra 中获取客户端的 IP 地址?

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

【问题讨论】:

  • 呃,哦,它在 @env['REMOTE_ADDR'] 中 - 我通过搜索“127.0.0.1”检查了 @env.inspect 输出,但它显示的是 IPv6 ::1 地址,所以我错过了。 ..任何人都可以随意发布,这样我就可以在没有 48 小时等待的情况下接受它..(免费代表!:P)

标签: ip-address sinatra


【解决方案1】:

反正我是来发布答案的。所以:

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

Sinatra 使用 Rack::Request API,因此您可以使用其中的许多可用内容。
还有Sinatra doc's的链接。

【讨论】:

  • 嗯,Rack::Request API 提到了一个 ip 方法,它也处理 HTTP_X_FORWARDED_FOR,有没有办法从 Sinatra 调用它?
  • 你应该能够做到 #{ @env['HTTP_X_FORWARDED_FOR'] } 不过我从来没有测试过这个,所以我不是肯定的。
  • 你也可以直接做 request.ip 。得到“/”做; "你的 IP:#{request.ip}";结束
【解决方案2】:

Sinatra 提供了一个request object,它是您应该使用的客户端请求数据的接口。

使用request.ip是查找客户端IP地址的首选方法:

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

【讨论】:

  • 需要注意的是Request#ip方法来自Rack,而不是来自Sinatra。
猜你喜欢
  • 2019-01-14
  • 2019-11-13
  • 1970-01-01
  • 2013-07-07
  • 2011-05-26
  • 2011-09-21
  • 2018-07-27
  • 1970-01-01
  • 2015-03-01
相关资源
最近更新 更多