首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Spray框架中获取传入IP地址

如何在Spray框架中获取传入IP地址
EN

Stack Overflow用户
提问于 2013-09-27 10:00:42
回答 3查看 3.9K关注 0票数 16

我正在查看传入的标头,但似乎没有IP:

HttpRequest(GET,http://127.0.0.1:8080/track/check,List(Accept-Language: uk-UA, 
uk, ru, en-US, en, Encoding: gzip, deflate, sdch, User-Agent: Mozilla/5.0 
(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29
Safari/537.36, Accept: text/html, application/xhtml+xml, application/xml;q=0.9, 
*/*;q=0.8, Connection: keep-alive, Host: 127.0.0.1:8080),EmptyEntity,HTTP/1.1)

这是我从浏览器发出的请求。基本上我是在看:

path("check") {
       get {
         implicit request => {
           val a = 5
         }
       }
     } ~

这里的请求对象没有任何关于IP地址的信息。任何帮助都是非常感谢的。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-27 13:21:30

如果您使用的是喷雾路由,那么有一个用于提取客户端ip的指令,称为clientIP =),要使用它,只需编写:

(path("somepath") & get) {
  clientIP { ip =>
    complete(s"ip is $ip")
  }
}

更简单,但您仍然需要添加显式配置才能从请求中获取IP。还有一点评论,也许我没有得到一些东西,但在spray中没有implicit request。实际上,传入的请求会渗透到您的路由结构中,如果您查看路由库,您会发现该路由只是一个别名:type Route = RequestContext => Unit。因此,如果您需要在某个时刻访问上下文,只需编写:

(path("somepath") & get) {
  clientIP { ip => 
    reqCont => reqCont.complete(s"ip is $ip")
  }
}

但请记住静态路由部分和动态部分。

票数 17
EN

Stack Overflow用户

发布于 2013-09-27 11:25:56

问题出在配置上,这没有得到很好的记录。添加以下内容:

# spray-can config
spray.can {
  server {
    remote-address-header = on
  }
}

强制喷雾将远程IP标头添加到主标头。地址标头将具有名称远程地址。

票数 30
EN

Stack Overflow用户

发布于 2019-08-23 20:44:38

你需要Alex K和4lex1v发布的内容。

下面的配置强制喷雾将远程IP标头添加到主标头。地址标头将具有名称远程地址。

# spray-can config
spray.can {
  server {
    remote-address-header = on
  }
}

然后,您需要在路由周围添加clientIP指令。

(path("somepath") & get) {
  clientIP { ip =>
    complete(s"ip is $ip")
  }
}

这将返回一个RemoteAddress类型的对象,您可以从中提取IP。

remoteAddress.toOption.map(_.getHostAddress).getOrElse("Unknown")

clientIP指令将提取IP (如果存在),但是,除非将remote-address-header标志设置为on,否则不会记录从中提取值的标头。默认为off

更多信息现在可以在喷雾文档中找到。http://spray.io/documentation/1.2.4/spray-routing/misc-directives/clientIP/#example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19041549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档