Python - 使用urllib2开启者进行发布

Sha*_*riq 9 python urllib2

我有一个urllib2开启器,并希望将它用于带有一些数据的POST请求.

我希望收到我正在发布的页面的内容,以及返回的页面的URL(我认为这只是一个30倍的代码;所以这些内容很棒!).

把它想象成代码:

anOpener = urllib2.build_opener(???,???)
anOpener.addheaders = [(???,???),(???,???),...,(???,???)]
# do some other stuff with the opener 
data = urllib.urlencode(dictionaryWithPostValues)
pageContent = anOpener.THE_ANSWER_TO_THIS_QUESTION
pageURL = anOpener.THE_SECOND_PART_OF_THIS_QUESTION
Run Code Online (Sandbox Code Playgroud)

Sha*_*riq 6

一旦人们意识到答案,这是一个如此愚蠢的问题.

只需使用:

open(URL,data)
Run Code Online (Sandbox Code Playgroud)

对于第一部分,和Rachel Sanders一样,

geturl()
Run Code Online (Sandbox Code Playgroud)

第二部分.

我真的无法弄清楚整个请求/开启者的工作原理如何; 我找不到任何好的文档:/


Rac*_*ers 5

这个页面可以帮助你:

http://www.voidspace.org.uk/python/articles/urllib2.shtml#data

import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
      'location' : 'Northampton',
      'language' : 'Python' }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
the_url  = response.geturl() # <- doc claims this gets the redirected url
Run Code Online (Sandbox Code Playgroud)

看起来你也可以使用response.info()直接获取Location头而不是使用.geturl().

希望有所帮助!