2012-11-19 32 views
9

我有一個urllib2的開門紅,並希望使用它與一些數據的POST請求。Python的 - 發佈了urllib2的揭幕戰

我在尋找接收我要發佈的網頁的內容,以及返回的網頁的網址(我認爲這只是一個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 

回答

6

一旦意識到答案,這是一個很愚蠢的問題。

只需使用:

open(URL,data) 

的第一部分,而像雷切爾·桑德斯提到,

geturl() 

的第二部分。

我真的想不通整個請求/揭幕戰的事情是如何工作的,雖然;如果你將數據添加到請求的方法被自動更改爲POST/

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 

看起來你也可以使用response.info()來直接獲取位置標題而不是使用.geturl()。

希望有幫助!

+0

我特別要求使用已經構建的urllib2開啓器的答案。 雖然我得到了答案;這整個問題是非常愚蠢的哈哈。 – Shariq

+1

你可能想看看http://docs.python-requests.org/en/latest/和http://pypi.python.org/pypi/requests/0.14.2。這是urllib的第三方替代品,它大大簡化了與Web服務器交互的任務。異步包裝器可在http://pypi.python.org/pypi/grequests中獲得。自從找到它之後,我沒有使用urllib編寫另一行代碼。 – synthesizerpatel

0

:我找不到任何好的文檔。看看下面的例子:

import urllib2 
import json 

url = "http://server.local/x/y" 
data = {"name":"JackBauer"} 
method = "PUT" 
request = urllib2.Request(url) 
request.add_header("Content-Type", "application/json") 
request.get_method = lambda: method 
if data: request.add_data(json.dumps(data)) 
response = urllib2.urlopen(request) 
if response: print response.read() 

正如我所提到的,如果使用GET/POST,lambda是不需要的。