2012-11-19 13 views
9

Mam otwieracz urllib2 i chcę go użyć do żądania POST z pewnymi danymi.Python - POSTing z otwieraczem urllib2

Czekam na otrzymanie zawartości strony, na którą PISZĘ, a także adresu URL strony, która jest zwracana (myślę, że to tylko kod 30x, więc coś takiego byłoby niesamowite!) .

myśleć o tym, jak kod:

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 

Odpowiedz

6

To jest takie głupie pytanie, gdy ktoś uświadomi sobie odpowiedź.

Wystarczy użyć:

open(URL,data) 

do pierwszej części, i jak Rachel Sanders wspomniano,

geturl() 

do drugiej części.

Naprawdę nie mogę zrozumieć, jak działa cała sprawa Żądanie/opener; Nie mogłem znaleźć żadnej ładnej dokumentacji:/

5

Ta strona powinna pomóc:

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 

Wygląda na to, można również użyć response.info(), aby pobierz nagłówek Location bezpośrednio, zamiast używać .geturl().

Nadzieję, że pomaga!

+0

Specjalnie poprosiłem o odpowiedź przy użyciu wbudowanego narzędzia urllib2, które zostało już zbudowane. Dostałem odpowiedź; to całe pytanie było bardzo głupie lol. – Shariq

+1

Możesz zajrzeć do http://docs.python-requests.org/en/latest/ i http://pypi.python.org/pypi/requests/0.14.2. Jest to zamiennik dla urllib innej firmy, który znacznie upraszcza interakcję z serwerami sieciowymi. Opakowanie asynchroniczne jest dostępne na http://pypi.python.org/pypi/grequests. Odszukując go, nie napisałem kolejnej linii kodu używając urllib. – synthesizerpatel

0

Po dodaniu danych do żądania metoda zostanie automatycznie zmieniona na POST. Sprawdź następujący przykład:

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

Jak już wspomniałem, lambda nie jest potrzebna, jeśli używasz GET/POST.

Powiązane problemy