2012-06-07 40 views
1

本质上,我只是在金字塔内部构建了一个API重定向路由,以在不使用JSONP的情况下处理跨域AJAX请求。抓住拍摄的URL后缀出请求时金字塔代替URL中的双正斜杠匹配

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

然而,:

我添加了一个路线,像这样:

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

与我想要捕获的URL,像这样我得到以下内容:

http:/location.of/other/api 

我猜在URL处理/匹配期间已经做了一些转义ING?我怎样才能避免这种情况,并获得两个正斜杠所需的URL?

即使我将URL作为GET参数传递,问题仍然存在。也许这与金字塔的多元分析的工作方式有关?

回答

3

这是任何基于WSGI的应用程序的基本限制。在URL传递给WSGI应用程序之前,URL将被urldecoded和斜杠压缩。如果你想保留斜杠,你需要两次urlencode。 AFAIK没有办法绕过这个使用查询字符串。

我想我应该指出,原始网址是可用的,但从它你将不得不解析你关心自己的部分。它在request.urlrequest.path_info是Pyramid和大多数WSGI应用程序用来分发URL的原因,因为它只包含与应用程序安装位置相关的子路径。

+0

太棒了,谢谢你的洞察力:)我使用了一个标志来决定是否使用https,并且让用户忽略了前缀,我将在路由期间追加。这似乎是最可靠的方式来做到这一点。 – BraedenP