Fremde Daten mit der AppEngine verarbeiten

Die AppEngine erlaubt es auch, Webseiten oder andere Daten von fremden Servern abzurufen und zu verarbeiten.
Das muss verständlicherweise beschränkt werden, da das Missbrauchspotential sehr hoch ist. Es können deshalb nicht beliebige Internetdienste aufgerufen werden, sondern nur „Webseiten“ bzw. alles, was ein Webserver auf Port 80 oder 443 anbietet.Dazu dient das Modul urlfetch. Der einfachste Aufruf ist:

response = urlfetch.fetch(url)
content = response.content

Wenn alles gut geht, reicht das schon. So weit ist es sehr praktisch. In der Praxis muss man jede Menge Fehler abfangen, zum Beispiel wie in diesem Ausschnitt:

    try:
        response = urlfetch.fetch(jadurl)
        if response.status_code == 200:
            self.xxheaders = response.headers
            self.xxcontent = response.content
            self.xxFetched = True
        elif response.status_code == 404:
            self.errortext = "File not found"
            self.xxcontent = "not found"
        else:
            self.errortext = "Bad Response Code"
            self.xxcontent = response.status_code
    except InvalidURLError:
        self.errortext = "Invalid URL"
    except DownloadError:
        self.errortext = "Error downloading file"
    except ResponseTooLargeError:
        self.errortext = "File to large"

Man hat auch Zugriff auf die HTTP-Header, beispielweise erhält man den Mime-Type mit

response.headers[‚content-type‘]

In meinen speziellen Fall würde mich auch interessieren, ob ein Header doppelt geschickt wird. Diese Information scheint man leider nicht zu bekommen.

Man kann auch SSL-geschützte Seiten mittels „https://“ runterladen. Leider werden dabei derzeit (1.1.) laut Dokumentation die Zertifikate nicht geprüft, sprich die stärkere Sicherheit ist nicht da. Das schränkt die Anwendung zurzeit noch ein.

Schreibe einen Kommentar