[Problem] TR-064 mit Micropython - Fehler 502

hansvonhugo

Neuer User
Mitglied seit
17 Okt 2007
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich versuche mittels micropython von einem Raspberry Pi Pico per TR-064 auf die Fritzbox zuzugreifen und (im ersten Step) daten für die Autentifizierung (nonce) zu ermitteln.
Die FB scheint erreichbar zu sein, ich erhalte jedoch eine Antwort UPNP-Error 502, XML-Error. Mir ist nicht klar woher der Fehler genau kommt - ggf. liegt es am verwendeten XML ...

Hat jemand eine Idee woran das liegen könnte? - ich bin langsam am verzweifeln - jede Hilfe wäre willkommen!

Hier die Ausgabe meines miniprogramms inklusive der verwendeten Werte (Url, Header, data) und danach der relevante Programmausschnitt, falls das bei der Analyse weiter hilft ...


url = http://192.168.178.1:49000/upnp/control/hosts

header = {'SoapAction': 'urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetHostListPath', 'Content-Type': 'text/xml; charset = "utf-8"'}

data = <?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:InitChallengexmlns:h="http://soap-authentication.org/digest/2001/10/"s:mustUnderstand="1"><UserID>"fbadmin"</UserID> </h:InitChallenge></s:Header> <s:Body><u:X_AVM-DE_GetHostListPath xmlns:u="urn:dslforum-org:service:Hosts:1"></u:X_AVM-DE_GetHostListPath"></s:Body></s:Envelope>

response = <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>502</errorCode>
<errorDescription>XML error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>



hier der verwendete Code -(der ist nicht wirklich schön, dient aber erstmal nur zum grundsätzlichen Testen)

user = 'fbadmin'

import mrequests as requests

header1 = { 'SoapAction' : 'urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetHostListPath', 'Content-Type' : 'text/xml; charset = "utf-8"'}

data1 = '<?xml version=\"1.0\" encoding=\"utf-8\"?>' \
'<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"' \
'xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">' \
'<s:Header>' \
'<h:InitChallenge' \
'xmlns:h="http://soap-authentication.org/digest/2001/10/"' \
's:mustUnderstand="1">' \
'<UserID>"fbadmin"</UserID> ' \
'</h:InitChallenge>' \
'</s:Header> ' \
'<s:Body>' \
'<u:X_AVM-DE_GetHostListPath xmlns:u="urn:dslforum-org:service:Hosts:1"></u:X_AVM-DE_GetHostListPath">' \
'</s:Body>' \
'</s:Envelope>'

url1 = 'http://fritz.box:49000/upnp/control/hosts'

wlanConnect()

# get nonce, contained by responce
response = requests.post(url1, data=data1, headers=header1)

print()
print('url = ', url1)
print()
print('header = ', header1)
print()
print('data = ', data1)
print()
print('response = ', response.text)



PS.: Ich habe in dieser Gruppe schonm andere TR-064 Fragen gesehen daher meien Frage in dieser Gruppe - falls ich falsch bin, bitte ein kurzer Hinweis.
 
Zuletzt bearbeitet:
So, wie das in Deinem Beitrag formatiert ist, kann man zwar praktisch nichts erkennen und nur raten (Code-Teile und Protokollausgaben gehören in CODE-Tags, damit sie nicht mit einer Proportionalschrift dargestellt werden - was das ist und warum deren Verwendung in diesem Fall Müll ist, verrät die Suchmaschine Deines Vertrauens), aber ich würde mal sagen, da fehlen ein paar Leerzeichen bei dem Durcheinander mit den XML-Tags und den "Fortsetzungszeilen" (das sind die mit dem "escape" (backslash) am Zeilenende) … zumindest beim (öffnenden) InitChallenge-Tag wird - so wie das oben steht - das Namespace-Attribut direkt an den Tag-Namen angehangen, was am Ende wohl zum (XML-)Syntaxfehler führt.

Dabei habe ich auch nur bis zu diesem Punkt bzw. nach der Ursache für den Fehler-Code geschaut - korrekt formulierter XML-Code wird zwar sicherlich nicht länger mit 502 quittiert, aber ob der Rest Deines Requests so funktionieren kann, war nicht Gegenstand der "Begutachtung".
 
Vielen Dank für Deine Antwort.

Sie hat zwar nicht sofort die Lösung gebracht, mich aber trotzdem auf den richtigen Weg geführt - dem initchallange Tag fehlte zwar wohl ein Leerzeichen, aber den Ausschlag gegeben hat die Entfernung des Anführungszeichens bei </u:X_AVM-DE_GetHostListPath">
Jetzt kommt zwar ein Authentication-fehler, aber den habe ich auch erst einmal erwartet, da die authentication in der verwendeten library nicht der von TR-064 entspricht - ich kann aber ersteinmal weitertesten - Klasse!

Zu deinem Hinweis der Codeformatierung: Ich bin eigendlich ein echter Freund von lesbaren Formatierung und hatte versucht das ganze mit dem Tag Inline-Code zu versehen, bin daran jedoch gescheitert und habe dann zwecks Unterscheidung Courite New verwendet - hab jetzt aber verstanden, dass es der Code-Tag sein muss.
 
Wegen den Tags > https://www.ip-phone-forum.de/help/bb-codes/
Inline ist hier nicht passend
[CODE]Dein
Code
steht
hier[/CODE]

ergibt

Code:
Dein
Code
steht
hier

und das Ganze als ICODE
[iCODE]Dein
Code
steht
hier[/iCODE]

ergibt

Dein Code steht hier

Bei längeren Codes, wird bei Verwendung von CODE kein (automatischer) Zeilenumbruch gemacht und ist scrollbar (was natürlich schön ist, da man ja sonst tw. mehrere Bildschirmseiten als CODE im Browser angezeigt bekommt.[/SPLOILER]
 
Wenn man den XML-Code gleich richtig in seinem Quelltext formatiert (z.B. so: https://github.com/PeterPawn/YourFr...f8a5e8c038350fbd2f63e215/juis/juis_check#L785) und sich dann noch hinsichtlich der XML-Syntax schlau macht (was sind eigentlich alles gültige Trennzeichen (delimiter) in XML?), dann kann man das auch viel sicherer formulieren und bei Problemen analysieren.

Denn am Ende hast Du auch an anderen Stellen (nach meiner Ansicht) lediglich Glück gehabt, daß da (eher versehentlich) noch gültige Trennzeichen vorhanden waren - schon das Envelope-Tag lebt nur davon, daß Du die Bezeichnung der Namespaces in "quotes" eingeschlossen hast, obwohl auch das (syntaktisch) nicht erforderlich gewesen wäre.

Ich hatte ja auch nicht umsonst betont, daß ich nur bis zum InitChallenge-Tag überhaupt gelesen habe und nach meinem Verständnis hast Du die Formatierung mit einer Schrift mit fester Laufweite (und zusätzlichen Zeilenumbrüchen?) auch erst im Nachhinein (jetzt vor einer knappen Stunde) angebracht. Wenn es da irgendwo "zog" (weil Zeichenketten nicht ordentlich in passende Delimiter eingeschlossen wurden), so war das eben OHNE die Formatierung praktisch auch nicht zu erkennen.

Wenn Du auch noch etwas bezüglich des CODE-Tags gelernt hast, freut mich das natürlich (nicht mit dem ICODE-Tag verwechseln, das ist nur für (sehr) kurze Schnipsel, die man von der Formatierung her vom Rest abheben will) ... nur plagt mich dabei dann sofort die Frage, warum Du das nicht einfach auch gleich anwendest. Oder ist es Dir "schade" um die Zeit, die Du in die derzeitige Formatierung "investiert" hast?

Es ist eigentlich ganz einfach:
Code:
url = http://192.168.178.1:49000/upnp/control/hosts

header = {'SoapAction': 'urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetHostListPath', 'Content-Type': 'text/xml; charset = "utf-8"'}

data = <?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:InitChallengexmlns:h="http://soap-authentication.org/digest/2001/10/"s:mustUnderstand="1"><UserID>"fbadmin"</UserID> </h:InitChallenge></s:Header> <s:Body><u:X_AVM-DE_GetHostListPath xmlns:u="urn:dslforum-org:service:Hosts:1"></u:X_AVM-DE_GetHostListPath"></s:Body></s:Envelope>

response = <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>502</errorCode>
<errorDescription>XML error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
und wenn man dann noch die verwendete "Sprache" angibt:
XML:
url = http://192.168.178.1:49000/upnp/control/hosts

header = {'SoapAction': 'urn:dslforum-org:service:Hosts:1#X_AVM-DE_GetHostListPath', 'Content-Type': 'text/xml; charset = "utf-8"'}

data = <?xml version="1.0" encoding="utf-8"?><s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:InitChallengexmlns:h="http://soap-authentication.org/digest/2001/10/"s:mustUnderstand="1"><UserID>"fbadmin"</UserID> </h:InitChallenge></s:Header> <s:Body><u:X_AVM-DE_GetHostListPath xmlns:u="urn:dslforum-org:service:Hosts:1"></u:X_AVM-DE_GetHostListPath"></s:Body></s:Envelope>

response = <?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>502</errorCode>
<errorDescription>XML error</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
, kriegt man auch noch eine (kostenlose) Syntax-Prüfung (im Rahmen der Kolorierung), bei der man - sofern man noch einmal aufmerksam im "Vorschaumodus" den eigenen Beitrag prüft - auch gleich noch die eigenen Fehler erkennen kann (deshalb ist das InitChallenge-Tag eben NICHT grün).

Und zu guter Letzt hat das CODE-Tag auch noch einen weiteren Vorteil ... Zeilenumbrüche erfolgen nur da, wo tatsächlich welche sind und nicht aufgrund der (HTML-)Formatierung, wie man an der unterschiedlichen Darstellung der data-Zeile sehr schön sehen kann.
 
Danke für die ausführliche Antwort - die Funktion mit Syntaxprüfung ist ja echt der Knaller!
P.S.: Ich hab das nicht gleich angewendet, weil ich es nachts um eins nicht mehr geblickt habe - der Wille war da! :)
 

Statistik des Forums

Themen
244,961
Beiträge
2,221,660
Mitglieder
371,728
Neuestes Mitglied
hd46
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.