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 アドレスに関する情報がありません。どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

17

スプレー ルーティングを使用している場合は、クライアント IP を抽出するためのclientIP=) というディレクティブがあります。これを使用するには、次のように記述します。

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

より単純ですが、リクエストから IP を取得するには、明示的な構成を追加する必要があります。そして少しコメントします。多分私は何かを得られなかったかもしれませんが、スプレーにはありませんimplicit request。実際には、着信リクエストはルーティング構造を通過します。ルーティング ライブラリを調べると、ルートが単なるエイリアスであることがわかりますtype Route = RequestContext => Unit。したがって、ある時点でコンテキストにアクセスする必要がある場合は、次のように記述します。

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

ただし、静的ルート部分と動的部分については覚えておいてください。

于 2013-09-27T05:21:30.290 に答える