Seite 1 von 1
Mit Python POST an PHP Programm schicken
Verfasst: Freitag 22. Januar 2010, 18:26
von Maaaario
Hey!
Ich bin neu hier und habe ein Problem!
Habe von meinem Lehrer die Aufgabe bekommen, eine CSV Datei von einem Server einzulesen, sie zu bearbeiten und als STRING an eine PHP Datei schicken die den STRING dann verwenden kann.
Ich habe allerdings keine ahnung wie man einen POST Request in Python ausführt ! Kann mir das bitte einer Erklären?
Also wenn jetzt das z.B. der server
www.blabla.at/ heißt und die php datei welche ausgeführt werden soll in /www/ausfuehren.php dem ordner liegt.
Und der String der Mitgeschickt werden soll string heißt.
Brauche Dringend Hilfe
DANKE
MFG Mario
//Sorry ich wusste nicht in welchen Bereich ich das Stecken kann...
Verfasst: Freitag 22. Januar 2010, 18:32
von Hyperion
Dazu solltest Du in der urllib etwas finden! Dort gibt es auch Beispiele, die das zeigen. Ist ganz einfach.
Verfasst: Freitag 22. Januar 2010, 18:33
von Dav1d
das geht mit der urllib2 (Python 2.X) oder urllib.request (Python 3.X)
http://docs.python.org/library/urllib2. ... b2.urlopen
Danke
Verfasst: Freitag 22. Januar 2010, 18:55
von Maaaario
Danke für Eure antworten...
Mein Englisch hält sich in Grenzen und ich habe versucht das umzusetzen was auf der Seite steht.
Das ist dabei herausgekommen:
Code: Alles auswählen
import urllib2
urllib2.urlopen("http://www2.SCHULSERVER.ac.at/d08090/upload.php","?CSV="+string)
Wenn ich jetzt in meine CSV datei schaue ist diese leer.
Ist der Python code richtig oder mache ich etwas falsch?
// Die CSV Datei wird durch die upload.php aufgefüllt (Besser gesagt: SOLLTE)

Verfasst: Freitag 22. Januar 2010, 19:23
von Hyperion
Ich dachte die Parameter stammen aus einer CSV-Datei? *wunder*
Du solltest die Paramater besser nicht von Hand zusammenbauen:
Code: Alles auswählen
In [20]: from urllib import urlencode
In [21]: params = urlencode((("fname", "Max"), ("lname", "Mustermann")))
In [22]: from urllib2 import urlopen
In [23]: page = urlopen(r"http://www.snee.com/xml/crud/posttest.cgi", params)
In [24]: page.read()
Out[24]: '<html><head><title>posted data</title></head><body><h1>posted data</h1
><p>First name: "Max"</p><p>Last name: "Mustermann"</p><p>REQUEST_URI: "/xml/cru
d/posttest.cgi"</p><p>QUERY_STRING: ""</p><p>CONTENT_LENGTH: "26"</p><p>content
passed via STDIN: "fname=Max&lname=Mustermann"</p></body></html>\n'
In [25]: page.close()
Verfasst: Freitag 22. Januar 2010, 19:34
von Maaaario
Verfasst: Freitag 22. Januar 2010, 19:40
von Hyperion
Wie soll man das ohne den dazugehörigen Quellcode sagen? Und was bringen die 7 Smileys?
Verfasst: Freitag 22. Januar 2010, 19:48
von Maaaario
Tut mir leid....Bin schon etwas "verrückt", da ich schon den Ganzen Tag daran arbeite.
Also ich erklär mal was das Programm machen soll: Es berechnet durchschnittt und Mittelwert aus den % die ein Schüler in einem Fach hat und schreibt diese dann is den String string. Danach soll der String per POST-Request an eine PHP datei auf meinem Schulserver gesendet werden.
Code: Alles auswählen
for i in listemit:
for u in i:
string = string + str(u) + ","
string = string + "\n"
string= string + "AVERAGE" + "," + str(mittelgesamt/len(listemit)) + "," + str(notegesamt/len(listemit))
from urllib import urlencode
from urllib import urlopen
params = urlencode(("csv", "asdf"))
page=urlopen("http://www2.SCHULSERVER.ac.at/d08090/upload.php",params )
Wie gesagt, immer noch der selbe doofe Fehler
Code: Alles auswählen
TypeError: not a valid non-string sequence or mapping object
Verfasst: Freitag 22. Januar 2010, 19:55
von Hyperion
Welche Zeile? Was für Objekte stehen in listemit? Wieso testest Du nicht erst einmal das Absenden "manuell", also ohne den Rest des Programms?
Halte Dich mehr an PEP8!
Verfasst: Freitag 22. Januar 2010, 19:59
von Panke
Die fehlt ein paar Klammern.
Vergleiche
mit
Code: Alles auswählen
params = urlencode((("fname", "Max"), ("lname", "Mustermann")))
Verfasst: Freitag 22. Januar 2010, 20:29
von Dav1d
Verfasst: Freitag 22. Januar 2010, 21:09
von Maaaario
Ich habe die Lösung mittlerweile selber gefunden
Ich weiß nicht ob das ganz korrekt ist aber es funktioniert
Code: Alles auswählen
import urllib,urllib2
url = 'http://www2.SCHULSERVER.ac.at/d08090/upload.php'
parameters = {'cvs' : string}
data = urllib.urlencode(parameters)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
page = response.read()
Ich habe die Ganze zeit versucht einen GET statt einen POST request zu machen :S