Probleme bei HTTPPost mit Pira WebRDS

Hallo in die Runde,

ich hatte folgendes Problem vor ca. einem Jahr schon mal direkt mit Torben besprochen: Wir steuern eigentlich seit vielen Jahren unseren Pira RDS-Encoder über den Pira WebRDS-Server. Im Wesentlichen generiert ein mAirList-Script die RDS-Befehle (z.B. “RT1=Ich bin Radiotext 1”) und schickt sie per HTTPPost an den Server.
Keine große Sache also.

In v4.2.2 funktionierte das auch noch, als wir auf v4.4.5 umgestiegen sind, funktionierte es nicht mehr.
Das seltsame: HTTPPost funktioniert an sich mit anderen Servern. Und der WebRDS-Server lässt sich auch mit diversen Browsern ansteuern. Nur die Kombination mAirList+WebRDS-Server funktioniert nicht.

Torben sagte, das einzige, was sich zwischen den beiden Versionen geändert hat, sei, dass er einen neuen Compiler verwendet. Insofern sind er und wir etwas ratlos.

Bevor wir weiter im Nebel stochern, werde wir in Kürze mal eine Analyse mit Wireshark o.ä. starten.

Bevor wir das starten würde mich mal interessieren: Ist hier irgendjemand in der Runde, der ebenfalls Pira WebRDS nutzt und mit mAirList ansteuert? Falls ja, habt Ihr ähnliche Erfahrungen gemacht?

Noch eine Frage an Torben:
Im Changelog zu v5.0 steht:

Version 5.0 RC Build 2552 (2014-11-07) Changes during beta stage: [ * ] New library used for all HTTP and FTP (replaced Synapse with Indy)
Betrifft das die HTTPPost-Funktion? Ich habe gestern mal mit v5.1 das Skript getestet, weil ich Hoffnung hatte, dass die neue Library vielleicht was gebracht hätte. Leider Fehlanzeige.

Viele Grüße
Stefan

Ich tippe auf falsches Encoding oder so.

Habt ihr die Möglichkeit mal mit Wireshark mitzusniffen und zu schauen, an welcher Stelle es wohl hakt?

Ja, wollen wir mal machen. Evtl. klappt das am Wochenende. Das steht zumindest auf meiner Todo-Liste. :wink:

Hi Torben,

wir haben gerade folgendes mit Wireshark festgestellt:

[code]POST /wewewe/mAirList_SystemLog.txt.html HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
Host: 172.20.10.22:8953
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Encoding: identity
User-Agent: Mozilla/5.0 (compatible; mAirList/4.4.6.2083)

TA=1%26_send%3DSendHTTP/1.1 200 OK
CONTENT-LENGTH: 200

RDS-Status: Verkehr=0 | PTY=10 | MS=1 | RT1: Technische Versuchssendung vom Standort Steinfurth. | RT2: H.rertelefon: (06033) 895 16 5 Internet: Radio-WeWeWe.de | Pilot= | Status=[/code]

Offenbar scheint mAirList(Script) das “=”- und das “&”-Zeichen zu maskieren, und zwar ab dem zweiten Vorkommen:

TA=1%26_send%3DSend

Der Browser hingegen übermittelt die Zeichen unmaskiert, also zum Beispiel so:

PS=WeWeWe&PI=1063&PTY=10&PTYN=&PTYNEN=0&MS=1&TPS=WeWeWe+V&TP=1&TA=1&_SEND=Send

Da das Problem erst ab dem zweiten Vorkommen auftritt, ist es bei dem Test mit der kleinen PHP-Page, die Du zum Testen gebaut hattest, nicht aufgefallen.

Kannst Du das Problem nachvollziehen?

Viele Grüße
Stefan

Teste bitte einmal den neuen Snapshot 2785 von mAirList 5.1.

Es gab tatsächlich kürzlich ein Problem (und Bugfix) hinsichtlich der Codierung der Parameter. Vielleicht ist das damit schon behoben. Sonst forsche ich noch einmal nach.

Gerade überprüft mit 5.1.3.2786. Leider keine Änderung, Fehler wie zuvor.

Poste bitte mal das Script.

Okay,

das ist eigentlich alles:

[code]SystemLog(‘RDS TA ein: Sende TA=1 -> RDS-Encoder’);

SystemLog('RDS TA ein: RDS-Encoder-Status: '+ HTTPPost(Config.ReadString(ccCustom, ‘RDS’, ‘Server’, ‘http://localhost/’), ‘TA=1&_send=Send’));
[/code]

Probier mal HTTPPostRaw statt HTTPPost.

Das “normale” HTTPPost nimmt noch URL-Encodierung vor.

HTTPPostRaw nimmt die Daten wie sie sind, du musst also selbst dafür sorgen, dass sie passende codiert sind. Was in deinem einfachen Szenario bereits der fall ist.

EDIT:

Alternativ weiterhin HTTPPost verwenden, aber die Parameter nicht mit & sondern mit #13 (Zeilenumbruch) trennen:

HTTPPost('http://localhost/', 'TA=1' + #13 + '_send=Send');

Danke, Torben. HTTPPost mit #13 funktioniert.

Bei HTTPPostRaw ist mir nicht klar, wieviele und welche Variablen die Funktion erwartet. Bei (URL, Data) hat er sich über die falsche Anzahl von Variablen beschwert.

Ah, sorry, hatte ich vergessen zu erwähnen: HTTPPostRaw erwartet - in der Mitte - noch einen dritten Parameter “ContentType”:

HTTPPostRaw('http://irgendwo/irgendwas/', 'text/plain', 'abc=123&def=456');