10 Stimmen

Verwendung von Python urllib2 zum Senden von POST-Anfragen und Abrufen von Antworten

Ich versuche, die HTML-Seite vom Senden einer POST-Anforderung zurückzubekommen:

import httplib 
import urllib 
import urllib2 
from BeautifulSoup import BeautifulSoup

headers = {
    'Host': 'digitalvita.pitt.edu',
    'Connection': 'keep-alive',
    'Content-Length': '325', 
    'Origin': 'https://digitalvita.pitt.edu',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1',
    'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Accept': 'text/javascript, text/html, application/xml, text/xml, */*',
    'Referer': 'https://digitalvita.pitt.edu/index.php',
    'Accept-Encoding': 'gzip,deflate,sdch',
    'Accept-Language': 'en-US,en;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Cookie': 'PHPSESSID=lvetilatpgs9okgrntk1nvn595'
}

data = {
    'action': 'search',
    'xdata': '<search id="1"><context type="all" /><results><ordering>familyName</ordering><pagesize>100000</pagesize><page>1</page></results><terms><name>d</name><school>All</school></terms></search>',
    'request': 'search'
}

data = urllib.urlencode(data) 
print data 
req = urllib2.Request('https://digitalvita.pitt.edu/dispatcher.php', data, headers) 
response = urllib2.urlopen(req)
the_page = response.read()

soup=BeautifulSoup(the_page)
print soup

Kann mir jemand sagen, wie ich das machen kann?

7voto

Martijn Pieters Punkte 953257

Geben Sie keine Content-Length Kopfzeile, urllib2 rechnet es für Sie aus. In Ihrer Kopfzeile ist jedoch die falsche Länge angegeben:

>>> data = urllib.urlencode(data) 
>>> len(data)
319

Ohne diese Kopfzeile funktioniert der Rest des geposteten Codes bei mir einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X