CGI und Binärdaten
Verfasst: Dienstag 30. November 2004, 18:20
Hi,
ich habe folgendes vor: ich habe ein Script, dass Dateien herunterlädt und selbst wieder ausgibt. Am besten ich schicke mal den Code:
das Ding ist ein CGI und sollte so aufgerufen werden:
relocate.py?url=http://www.google.de/intl/de_de/images/logo.gif&ext=abc
Ext=abc, damit da einfach etwas steht, vielleicht kommt später noch etwas dazu, dass es auch wirklich nutzt. Nun, wenn ich ihm HTML Dateien zu futtern gebe gibt es kein Problem, aber wenn ich Binärdateien wie eben das Google Logo nehme läuft es zwar durch, aber der Browser zeigt einen Fehler. Ich nehme an, dass ich bei read() noch ein encode() machen muss, aber was für einen Codec soll ich nutzen?
ich habe folgendes vor: ich habe ein Script, dass Dateien herunterlädt und selbst wieder ausgibt. Am besten ich schicke mal den Code:
Code: Alles auswählen
import cgi, urllib, sys
import cgitb
def initpage(mime="text/plain"):
print "Content-Type: %s" % mime
print
def getfile(url):
# remote - file like object
try:
remote = urllib.urlopen(url)
# content type
mime = remote.headers.gettype()
return (remote, mime)
except IOError:
raise IOError('No such file or directory')
def main():
cgitb.enable()
form = cgi.FieldStorage()
# get url field
try:
url = form['url'].value
except KeyError:
url = None
# get extension field
try:
ext = form['ext'].value
except KeyError:
ext = None
if not url or not ext:
initpage('text/html')
print '<html><head><title>Too less args given, Sai</title></head><body>You need to specify URL and EXT</body></html>'
sys.exit(100)
# okay, let's start work!
try:
# we try to get that URL
remotefile = getfile(url)
# well done, now initialise the page with the proper Content Type (determined by the content type of the ur)
initpage(mime=remotefile[1])
#print 'File found'
print remotefile[0].read()
except IOError:
initpage('text/html')
print '<html><head><title>No such file, Sai</title></head><body>No such file: %s</body></html>' % url
if __name__ == '__main__':
main()
relocate.py?url=http://www.google.de/intl/de_de/images/logo.gif&ext=abc
Ext=abc, damit da einfach etwas steht, vielleicht kommt später noch etwas dazu, dass es auch wirklich nutzt. Nun, wenn ich ihm HTML Dateien zu futtern gebe gibt es kein Problem, aber wenn ich Binärdateien wie eben das Google Logo nehme läuft es zwar durch, aber der Browser zeigt einen Fehler. Ich nehme an, dass ich bei read() noch ein encode() machen muss, aber was für einen Codec soll ich nutzen?