Urlfetch umgeleitet in eine Endlosschleife in Python

Ich versuche, eine URL zu laden, die sich selbst umleitet. Ich gehe davon aus, dass es ein Cookie lädt und es sucht es aber es sieht es nie so, dass es diese unendliche Schleife von Anfragen gibt.

Ich habe versucht, urllib2, urlfetch und httplib2. Keine Arbeit.

Ich habe das aber probiert:

url = "http://www.cafebonappetit.com/menu/your-cafe/collins-cmc/cafes/details/50/collins-bistro" thing = urllib2.HTTPRedirectHandler() thing2 = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(thing, thing2) url = 'http://www.nytimes.com/2005/10/26/business/26fed.html?pagewanted=print' page = opener.open(url) 

Das funktioniert in der Shell, aber nicht auf der Google App Engine. In der Dokumentation für urlfetch: http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html

Unter follow_redirects heißt es: "Cookies werden nicht auf Umleitung behandelt. Wenn Cookie-Handling erforderlich ist, setzen Sie follow_redirects auf False und behandeln beide Cookies und Umleitungen manuell."

Ich habe keine Ahnung, wie das geht und die Dokumentation scheint auch keine Hinweise zu geben.

Ich gegoogelt die Hölle aus dieser Ausgabe und es gibt keine gemeldeten Themen wie diese, die für mein Problem arbeiten.

One Solution collect form web for “Urlfetch umgeleitet in eine Endlosschleife in Python”

Ein wenig mehr erklärung Froh, dass zumindest das Verhalten der Website erklärt wird: Es will ein paar Cookies, und wenn das Cookie nicht gesetzt ist, leitet es sich mit einem Cookie-Setting-Header um. Sie sollten wahrscheinlich lesen, wie Cookies arbeiten; Die Website sendet den Cookie mit einem Set-Cookie-Header, und der Browser muss ihn in einem Cookie-Header zurückschicken (mit einigen Variationen). Python hat eine Bibliothek für die Verwaltung von Sammlungen von Cookies, Cookielib, um Ihnen dabei zu helfen.

Es ist am besten, die native urlfetch API zu verwenden; Sein Rückgabeobjekt hat ein Header-Objekt, das ein Dikt ist, das alle Header (zB den Set-Cookie-Header) gibt. Um bestimmte Header zu senden, verwenden Sie das Header-Argument der Funktion urlfetch.fetch (). Hier werden Sie den Cookie-Header verwenden (aber denken Sie daran, dass das Format des Cookie-Headers, den Sie setzen, nicht dasselbe ist wie das Set-Cookie-Header, das Sie erhalten – hier kommt cookielib.

Viel Glück!

PS Mit curl -v ist es leicht zu sehen, dass die Seite tatsächlich drei verschiedene Set-Cookie-Header sendet. Wahrscheinlich müssen Sie mit allen drei umgehen.

Python ist die beste Programmiersprache der Welt.