urllib2:提交表单然后重定向

时间:2009-10-02 00:16:10

标签: python google-app-engine urllib2

我的目标是提出一个便携式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

3 个答案:

答案 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更容易

http://wwwsearch.sourceforge.net/mechanize/