Seite 1 von 2

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 21:54
von rofldofl
Puh mit Fragen hab ich es nicht so :D

Ich habe nicht dass Gefühl dass meine Frage verstanden wurde deswegen bitte ich euch mir die Folgende zu beantworten dann weiß ich was ich wissen muss.

Folgendes ist Script 1 von Server 1 mit der IP 192.168.100.234 (ich habe es mal in Python geschrieben (script1 spielt für mich zuerst keine Rolle))

Code: Alles auswählen

def frame_xml(AddressVerified,AmountPaid):
    xml_data = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/ metadata" xmlns="http://www.w3.org/2005/Atom">
    <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="SS.WebData.Order" />
     <title />
     <POST>here_i_am</POST>
     <id />
     <content type="application/xml">
     <m:properties>
       <d:AddressVerified m:type="Edm.Byte">%s</d:AddressVerified>
       <d:AmountPaid m:type="Edm.Decimal">%s</d:AmountPaid>
     </m:properties>
    </content>
   </entry>"""%(AddressVerified,AmountPaid)
   return xml_data

headers = {'Content-Type': 'application/xml'}
xml_data = frame_xml('AddressVerified','AmountPaid')
print requests.post('http://192.168.0.125/randalone/brd-app/script2.py', data=xml_data, headers=headers).text
Meinem Minimalen Verständnis von Python ist dass ein Request den ich an http://192.168.0.125/randalone/brd-app/script2.py sende.


Meine neue Frage ist folgende:
Wie müsste script2.py aussehen wenn ich

Script1 als Response eine txt Datei mit dem Inhalt "JA" geben möchte sollte in der XML der POST den Inhalt "here_i_am" enthalten
und wenn nicht dann den Statuscode 444


Und um die Frage die wahrscheinlich gleich wieder kommt zu beantworten ich benutze in Script 2 kein Framework da Script2 keiene visuelle Darstellung benötigt.

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 22:09
von noisefloor
Hallo,
Richtig. Was du aber denke ich falsch verstehst: du sendest so _nicht_ an script2.py. Du hast lediglich `skript2.py` in der URL und das bedeutet erst mal: nichts.

Du musst auf 192.168.0.125 einen Server (Server im Software-Sinne, nicht Hardware) laufen haben, der auf der URL `randalone/brd-app/script2.py` lauscht und den POST-Request entgegen nimmt. Das macht man üblicherweise mit einem der vielen verfügbaren Python Webframeworks. Im gegebenen Fall wäre Bottle oder Flask ein geeignetes Framework. Oder auch Hug.

Gruß, noisefloor

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 22:13
von rofldofl
Ooh ja ich habe flask auf dem Server von script 2.
Nach was muss ich denn bei flask suchen wenn ich dass so haben möchte?

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 22:22
von Sirius3
@rofldofl: was hast Du denn an Dokumentation gelesen ??

Code: Alles auswählen

@app.route('/randalone/brd-app/script2.py', methods=['POST'])
def read_xml():
    xml = ElementTree.fromstring(request.data)
    [...]
XML erzeugt man übrigens nicht per Stringformatierung, sondern aus einem XML-Tree.

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 22:23
von rofldofl

Code: Alles auswählen

import xmltodict
@app.before_request
def before_request():
    print xmltodict.parse(request.data)['xml']['POST']

Würde ich so die Ausgabe der xml erhalten?

Re: Mit Python "request data" definieren

Verfasst: Donnerstag 9. November 2017, 22:24
von rofldofl
@Sirius3
Sehr viel aber scheinbar nicht genug

Re: Mit Python "request data" definieren

Verfasst: Freitag 10. November 2017, 07:36
von noisefloor
Hallo,

@rofldofl:
1. warum `before_request`? Du willst doch die Daten erst abarbeiten, wenn der Request komplett ist, damit du dann eine entsprechende Response schreiben kannst.
2. Was für eine Modul ist `xmltodic? Wohin die Daten da gehen -> RTFM
3. Wenn du die XML-Daten sowieso in eine Dict wandelts, kannst du auch direkt mit JSON arbeiten...
4. so wie von Sirius3 gezeigt würde ich es auch machen

Gruß, noisefloor