2012-11-19 17 views
9

Bir urllib2 açıcım var ve bazı verilerle POST isteği için kullanmak istiyorum.Python - urllib2 açacağı ile işaretleme

Gönderdiğim sayfanın içeriğini ve döndüğünüz sayfanın URL'sini almak istiyorum (bunun yalnızca 30x kod olduğunu düşünüyorum; bu nedenle bu satırlardaki bir şey harika olurdu!) . kodu olarak bunun

Think:

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 

cevap

6

Bu, yanıtı bir kere gerçekleştirdiğinde böyle saçma bir sorudur. İlk bölümü için

open(URL,data) 

, ve Rachel Sanders gibi ikinci bölümü için,

geturl() 

söz:

Sadece kullanın.

Tüm İstek/açıcı olayının nasıl çalıştığını gerçekten anlayamıyorum; Güzel bir belge bulamadım:/

5

Bu sayfa size yardımcı olmalıdır:

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 

Size ayrıca response.info() kullanabilir benziyor Konum üstbilgisini doğrudan .geturl() kullanarak alın.

Bu yardımcı olur umarım!

+0

Daha önce oluşturulmuş bir urllib2 açacağı kullanarak bir yanıtı özellikle istedim. Yine de cevabı aldım; Bütün bu soru son derece aptalca lol. – Shariq

+1

http://docs.python-requests.org/en/latest/ ve http://pypi.python.org/pypi/requests/0.14.2 adreslerine göz atmak isteyebilirsiniz. Urllib için web sunucularıyla büyük ölçüde etkileşimde bulunma görevini basitleştiren üçüncü taraf bir yedek. Bir async sarıcı @ http://pypi.python.org/pypi/grequests kullanılabilir. Bulunduğundan beri, urllib kullanarak başka bir kod yazmamıştım. – synthesizerpatel

0

İstek üzerine veri eklerseniz, yöntem otomatik olarak POST olarak değişir. Aşağıdaki örneği inceleyin:

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() 

i GET/POST kullanırsanız lambda gerekli değildir belirtildiği gibi.