我的目标是提出一个便携式urllib2解决方案,它可以POST一个表单,然后将用户重定向到出来的内容。 POST部分很简单:
request = urllib2.Request('https://some.site/page', data=urllib.urlencode({'key':'value'}))
response = urllib2.urlopen(request)
提供data
设置POST的请求类型。现在,我怀疑我应该关注的所有数据来自response.info()
& response.geturl()
。我应该在self.redirect(response.geturl())
的{{1}}方法中进行get(self)
。
但是我应该如何处理标题?还有什么我忽略的吗?代码片段受到高度赞赏。 :)
TIA。
编辑:这是我提出的一个天真的解决方案。重定向,但远程服务器显示错误,指示与以前发布的表单不匹配:webapp.RequestHandler
答案 0 :(得分:3)
使用urllib2跟踪重定向的标准方法是使用HTTPRedirectHandler。 (不确定你的意思是'什么出来',但我假设这里有一个标准的http重定向,javascript重定向是一个不同的野兽)
# Created handler
redirectionHandler = urllib2.HTTPRedirectHandler()
# 2 apply the handler to an opener
opener = urllib2.build_opener(redirectionHandler)
# 3. Install the openers
urllib2.install_opener(opener)
request = urllib2.Request('https://some.site/page', data=urllib.urlencode({'key':'value'}))
response = urllib2.urlopen(request)
有关处理程序的详细信息,请参阅urllib2.HTTPRedirectHandler。
答案 1 :(得分:2)
我怀疑这几乎总会失败。当您发布表单时,您最终得到的URL就是您发布到的URL。将其他人发送到此URL,或者甚至使用刚刚发布的同一浏览器再次访问该URL,将进行GET,并且该页面将不具有已发布的表单数据。唯一可行的方法是,如果站点在POST后重定向到包含某种会话信息的URL。
答案 2 :(得分:0)
你会发现使用机械化比直接使用urllib2更容易