2016-11-19 58 views
3

之前得到的URL的一部分。如果一個客戶機對proto://hostname:port/path請求我想獲得proto://hostname:port是否有hunchentoot的方式路徑

我可能錯過了一些東西,但現在我能想到的唯一的辦法就是沿着

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

線使用的東西,有沒有什麼函數/方法具體針對或一個簡單的方法?

主要原因是server-protocol返回我必須解析的關鍵字符號(例如:http/1.1)。當然,我可以做到,但它可能已經存在,我可能會錯過它。

回答

2

您可以安裝PURIQURI解析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和(server-protocol)方法的協議。我只需要解析/過濾後者的響應,因爲它返回的關鍵字也包含版本號 – Paralife

+0

@Paralife對不起,我不確定要了解你想要的。我試圖編輯答案以提供更多細節,但如果這還不夠,可否添加一個示例來說明如何實現您的處理程序?謝謝 – coredump

+0

(request-uri *)不會返回完整的網址。它返回host:port之後的部分。爲了更好地說明我的問題:你能給我一個示例處理程序,它只是輸出客戶端在地址欄中的內容嗎? (當然是第一個散列) – Paralife

相關問題