2016-11-19 36 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

相关问题