金字塔子请求

5

因为搜索的缘故,我需要调用其他URI的GET、POST、PUT等请求,但是我无法在Pyramid框架内部找到这样的方法。目前有没有什么办法可以实现呢?


你需要在自己的应用程序中调用视图,还是完全访问另一个服务器? - Martijn Pieters
@MartijnPieters 另一台服务器 - Wiz
你能否重新表述问题,例如“从Pyramid应用程序发送请求”?“subrequests”是Pyramid中具有特殊含义的术语,因此这会产生误导。 - merwok
3个回答

9

只需使用现有的Python库来调用其他Web服务器。

在Python 2.x中,请使用urllib2,在Python 3.x中,请使用urllib.request。或者,您可以安装requests

请注意,在为自己提供服务时从您的服务器调用外部站点可能意味着您的访问者最终等待停止响应的第三方Web服务器。确保设置合理的超时时间。


为了提高用户体验,您可以通过AJAX向第三方服务器发出请求。 - born

6
金字塔框架使用WebOb,自1.2版本起,其具备了客户端API。
from webob import Request
r = Request.blank("http://google.com")
response = r.send()

通常,您想要覆盖请求的任何内容,只需将其作为参数传递即可。
from webob import Request
r = Request.blank("http://facebook.com",method="DELETE")

另一个方便的功能是,您可以查看作为传输的http请求。
print r

DELETE  HTTP/1.0
Host: facebook.com:80

docs


你会如何在POST、PUT等请求中使用它? - Wiz
哦,我明白了。我仍然觉得requests有一个更干净的API,所以我继续使用它了,但还是谢谢! - Wiz

1

同时检查响应状态码:response.status_int。我举个例子,用它来内省我的内部URI,并查看给定的相对URI是否真正由框架提供服务(例如生成面包屑并仅在路径后面有页面时将中间路径作为链接)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接