本质上,我只是在Pyramid内部构建API重定向路由,以处理跨域AJAX请求,而无需使用JSONP。
我添加了一条路线,如下所示:
config.add_route("api","/api/{url:.*}")
我想用它来捕获如下URL:
http://domain.com/api/http://location.of/other/api
但是,当从Request matchdict中获取捕获的URL后缀时,我得到以下信息:
http:/location.of/other/api
我猜想在URL处理/匹配过程中已经进行了一些转义?如何避免这种情况,并使用两个正斜杠获取所需的URL?
即使我将URL作为GET参数传递,问题仍然存在。 也许这与金字塔的多重预测的工作方式有关?
这是 任何 基于WSGI的应用程序的基本限制。在将URL传递到WSGI应用程序之前,对URL进行url解码并压缩斜杠。如果要保留斜线,则需要对它们进行urlencode两次。AFAIK无法使用查询字符串解决此问题。
我想我应该指出原始URL是可用的,但您必须从中解析出您关心的部分。它在request.url。request.path_info是金字塔和大多数WSGI应用程序用来分发URL的方法,因为它仅包含相对于应用程序安装位置的子路径。
request.url
request.path_info