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