Есть ли способ в hunchentoot, чтобы получить часть URL до пути

Если клиент делает запрос на proto://hostname:port/path Я хотел бы получить proto://hostname:port,

Я мог бы что-то пропустить, но сейчас я могу думать только о том, чтобы использовать что-то вроде

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

Существует ли какая-либо функция / метод, специфичная для этого, или более простой способ?

Основная причина в том, что server-protocol возвращает символ ключевого слова (например, :http/1.1) которую я должен разобрать. Конечно, я могу это сделать, но это то, что уже может быть, и я, возможно, пропустил это.

1 ответ

Вы можете установить 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/"

В вашем случае вы можете получить доступ к URI с помощью (request-uri*),

Другие вопросы по тегам