cgi formen und urllib

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
tilli88
User
Beiträge: 4
Registriert: Samstag 19. Februar 2011, 19:21

Hallo zusammen und erstmal einen schönen abend!!!

Ich bräuchte mal ein wenig hilfe bei einem problem und zwar möchte ich eine funktion schreiben die daten an eine url sendet. Es handelt sich um diese adresse http://exon.gatech.edu/heuristic_hmm2.cgi. Ich habe eine textdatei mit ca. 200 amino sequenzen die ich an diese cgi form senden möchte. Von Hand würde das ewigkeiten dauern, daher will ich den vorgang automatisieren. Nun zu meiner frage. Wie kann ich mithilfe von urllib daten an die formen dieser seite senden? Mein Ansatz den ich bis jetzt habe ist folgender:

Code: Alles auswählen

import urllib
params = urllib.urlencode((('title', 'seq'), ('sequence', 'MNRNDCCEQQQQS'), ('address', 'meine email adresse')))
htmlinfo = urllib.urlopen("http://exon.gatech.edu/heuristic_hmm2.cgi", params)
inhoud = htmlinfo.read()

print inhoud
Irgendwie scheint das aber nicht zu funktionieren. Gibt es irgendwie eine möglichkeit die felder auf der website auszulesen?

Grüße

Tilli88
BlackJack

@tilli88: Was heisst denn „scheint nicht zu funktionieren” genau? Wenn man deine Beispieldaten von Hand in das Formular eingibt, dann bekommt man wieder das Formular als Antwort, mit dem Satz „Please submit at least 400 nt of sequence.” direkt vor dem Formular.

Ausserdem ist die Methode für die Datenübermittlung POST und nicht GET. Du mischst irgendwie beides in dem Du die Daten für GET kodierst, aber das dann per POST übermitteln willst.
tilli88
User
Beiträge: 4
Registriert: Samstag 19. Februar 2011, 19:21

@BlackJack: Okay, dann habe ich mich falsch ausgedrückt. Es funktioniert nicht so wie ich es denn haben möchte :D. Wie müsste ich die sache denn dann angehen? Ich habe bis jetzt noch keine erfahrung mit Cgi programmierung.

Grüße

Tilli88
BlackJack

@tilli88: Erst einmal muss ich mich entschuldigen: Die Daten muss man ja anscheinend tatsächlich selber URL-kodieren bevor man sie `urlopen()` übergibt. Ich dachte das macht die Funktion intern schon selber. :oops:

Die Fehlerbeschreibung könnte noch ein wenig präziser sein. Wenn etwas nicht wie gewünscht funktioniert, ist es in der Regel hilfreich wenn auch beschrieben wird, wie das Ergebnis vom Erwarteten abweicht.

Ein Problem sind hier wohl die Beispieldaten — denn wie schon gesagt funktioniert das nicht einmal wenn man die per Hand in das Webformular einträgt.

Und dann müsste man auch alle Felder in dem Formular senden. Da sind einige vom Typ „hidden” enthalten und von den Kästchen müsste man vielleicht auch mindestens eines „ankreuzen”.
Antworten