Пирамида, заменяющая двойной слеш в URL Matchdict

По сути, я просто строю маршрут перенаправления API внутри Pyramid для обработки междоменных запросов AJAX без использования JSONP.

Я добавил маршрут, например, так:

config.add_route("api","/api/{url:.*}")

с помощью которого я хочу захватить URL, например, так:

http://domain.com/api/http://location.of/other/api

Однако при извлечении захваченного URL-суффикса из запроса соответствия я получаю следующее:

http:/location.of/other/api

Я предполагаю, что во время обработки / сопоставления URL-адресов было выполнено некоторое экранирование? Как я могу избежать этого и получить желаемый URL двумя косыми чертами?

Even if I pass the URL in as a GET parameter, the issue remains. Perhaps it's something to do with the way Pyramid's multidicts work?

Ответы на вопрос(1)

Решение Вопроса

any Приложение на основе WSGI. URL-адреса кодируются по URL-адресу, а косые черты уплотняются перед передачей URL-адреса в приложение WSGI. Если вы хотите сохранить косые черты, вам нужно дважды их кодировать. AFAIK, нет никакого способа обойти это, используя строку запроса.

Полагаю, я должен указать, что исходный URL-адрес доступен, но из него вам придется анализировать ту часть, которая вам небезразлична. Он находится вrequest.url. request.path_info это то, что Pyramid и большинство приложений WSGI используют для отправки URL-адресов, потому что он содержит только подпуть, относящийся к месту монтирования приложения.

 BraedenP08 июн. 2012 г., 05:59
Круто, спасибо за понимание :) Я прибег к использованию флага для определения того, использовать ли https, и чтобы пользователи не указывали префикс, который я добавлю во время маршрутизации. Это кажется самым надежным способом сделать это.

Ваш ответ на вопрос