2016-11-19 4 views
3

クライアントがproto://hostname:port/pathのリクエストをした場合、proto://hostname:portを取得したいと思います。パスの前にURLの一部を取得する方法がありますか?

私が何かを見逃している可能性がありますが、今私は考えることができる唯一の方法は

(format nil "~A://~A" (stringify-downcase-scan (server-protocol*)) (host)) 

の線に沿って何かを使用することですが、そのための任意の関数/メソッドの特定や簡単な方法はありますか?

主な理由は、server-protocolキーワードシンボル私が解析しなければならない(例えば:http/1.1)を返すことです。もちろん私はそれをすることができますが、それは既にそこにあるかもしれないものであり、私はそれを逃したかもしれません。

答えて

2

あなたはPURIまたはQURIはURIを解析するためにインストールすることができます

CL-USER> (describe (quri:uri "proto://hostname:1000/path")) 
#<QURI.URI:URI proto://hostname:1000/path> 
Type: QURI.URI:URI 
Class: #<STRUCTURE-CLASS QURI.URI:URI> 
SCHEME: "proto" 
USERINFO: NIL 
HOST: "hostname" 
PORT: 1000 
PATH: "/path" 
QUERY: NIL 
FRAGMENT: NIL 

次に、あなたがこれを行うことができます:

(quri:render-uri 
(quri:merge-uris (quri:uri "/") 
        (quri:uri "proto://hostname:1000/path"))) 

=> "proto://hostname:1000/" 

をあなたのケースでは、あなたは(request-uri*)でURIにアクセスすることもできます。

+0

ありがとう、しかし私は逆をしたい:パスの前にURL文字列を取得し、それを解析しない。 hunchentootリクエストの文脈では、私は暗黙のうちに以下の部分を持っています。私はhost:port from(host)メソッドとprotocol from(server-protocol)メソッドを持っています。私はちょうどバージョン番号を含むキーワードを返すので、後者の応答を解析/フィルタリングする必要があります。 – Paralife

+0

@Paralife申し訳ありませんが、私はあなたが欲しいものを理解するのか分かりません。私は詳細を提供するために答えを編集しようとしましたが、これでは十分ではない場合、ハンドラの実装方法を示す例を追加できますか? Thanks – coredump

+0

(request-uri *)は完全なURLを返しません。これはhost:portの後の部分を返します。私の問題をより良く説明するには:クライアントがアドレスバーに出力したものだけを出力するサンプルハンドラを教えてもらえますか? (もちろん、最初のハッシュまで) – Paralife

関連する問題