2010-07-12 8 views
6

Die Seite Ich bin zu Spinne versucht, wird mit dem javascript:Wie bekomme ich Pythons Mechanize, um eine Ajax-Anfrage zu senden?

request.open("POST", url, true); 

in zusätzliche Informationen über Ajax zu ziehen, die ich Spinne benötigen. Ich habe verschiedene Permutationen versucht:

r = mechanize.urlopen("https://site.tld/dir/" + url, urllib.urlencode({'none' : 'none'})) 

Mechanize zu bekommen die Seite zu bekommen, aber es ergibt sich mir immer wieder die Login-HTML bekommen, was darauf hinweist, dass etwas nicht stimmt. Firefox scheint laut Firebug keine HTTP-Daten zum POST hinzuzufügen, und ich füge ein leeres Feld hinzu, um zu versuchen, die URL zu zwingen, "POST" anstatt "GET" zu verwenden, in der Hoffnung, dass die Seite das Feld ignoriert. Ich dachte, dass die URL von Mechanize Cookies enthält. Da es sich jedoch um HTTPS handelt, ist es schwierig, die Transaktion zu debuggen.

Gibt es einen besseren Weg?

Auch scheint es nicht anständige API-Dokumentation für Mechanize, nur Beispiele. Das ist nervig.

Antwort

8

Das war, was ich kam mit:

req = mechanize.Request("https://www.site.com/path/" + url, " ") 
req.add_header("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7") 
req.add_header("Referer", "https://www.site.com/path") 
cj.add_cookie_header(req) 
res = mechanize.urlopen(req) 

Was interessant ist die „“ in dem Aufruf von mechanize.Request Kräfte es in „POST“ Modus. Offensichtlich erstickte die Seite nicht auf einem einzigen Platz :)

Es brauchte auch die Cookies. Ich debuggte die Header mit:

hh = mechanize.HTTPHandler() 
hsh = mechanize.HTTPSHandler() 
hh.set_http_debuglevel(1) 
hsh.set_http_debuglevel(1) 
opener = mechanize.build_opener(hh, hsh) 
logger = logging.getLogger() 
logger.addHandler(logging.StreamHandler(sys.stdout)) 
logger.setLevel(logging.NOTSET) 
mechanize.install_opener(opener) 

Gegen was Firebug zeigte.

+0

Wie bringt es der Platz in den POST-Modus? Sind das nicht nur die Daten, oder ist Post als ein Raum für Mechanisierung definiert? – brainysmurf

+2

@brainysmurf Ohne den Speicherplatz ist es eine GET-Anfrage, aber durch die Bereitstellung einer Daten ändert es sich zu einer POST-Anfrage, und ein Leerzeichen ist die kleinste einfachste "Daten", die ich bereitstellen könnte. Der Raum an sich ist nichts Besonderes. – fret

Verwandte Themen