![]() |
Problem mit Sonderzeichen bei HTTP Post [ICS]
Hi,
ich habe ein Problem mit HTTP Posts, die ich über die ![]() Wenn ein Parameter eckige Klammern enthält, versteht offensichtlich der Server meine Anfrage nicht. Dieser Code funktioniert beispielsweise nicht.
Code:
Dieser aber schon:
http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?protocol=http&seqnr=0&ignore_ident=1&pfmodus=1&transfertype=xml&from=Hemsbach%20%5BDB%5D&to=Heidelberg%2C%20Hbf&date_from=13.12.05&date_to=09.12.06&weekday_mo=checked&weekday_tu=checked&weekday_we=checked&weekday_th=checked&weekday_fr=checked&weekday_sa=checked&weekday_su=checked×el=depart&time=12:00&time0_from_hin=0:00&time0_to_hin=23:59&time0_from_rueck=0:00&time0_to_rueck=23:59&answerMode=download&output=pdf&maxNrOfChanges=1000&pr1.1=CHECKED&pr1.2=CHECKED&pr1.3=CHECKED&pr1.4=CHECKED&pr1.5=CHECKED&pr1.6=CHECKED&pr1.7=CHECKED&pr1.8=CHECKED&pr1.9=CHECKED&pr1.10=CHECKED&outputFilter=complete&filter=&start=
Code:
Der Unterschied liegt im Parameter from, der im ersten Fall Hemsbach%20%5BDB%5D im zweiten Fall Hemsbach%20Mitte lautet; beides sind gültige Bahnhöfe der DB.
http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?protocol=http&seqnr=0&ignore_ident=1&pfmodus=1&transfertype=xml&from=Hemsbach%20Mitte&to=Heidelberg%2C%20Hbf&date_from=13.12.05&date_to=09.12.06&weekday_mo=checked&weekday_tu=checked&weekday_we=checked&weekday_th=checked&weekday_fr=checked&weekday_sa=checked&weekday_su=checked×el=depart&time=12:00&time0_from_hin=0:00&time0_to_hin=23:59&time0_from_rueck=0:00&time0_to_rueck=23:59&answerMode=download&output=pdf&maxNrOfChanges=1000&pr1.1=CHECKED&pr1.2=CHECKED&pr1.3=CHECKED&pr1.4=CHECKED&pr1.5=CHECKED&pr1.6=CHECKED&pr1.7=CHECKED&pr1.8=CHECKED&pr1.9=CHECKED&pr1.10=CHECKED&outputFilter=complete&filter=&start=
Ich verwende die Funktion ![]() Das Problem tritt lediglich bei den Klammern auf, Leerzeichen werden kodiert akzeptiert. Wie komme ich dem Problem auf die Schliche? Der komplette Quelltext kann ![]() jakewalk |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Herzlich willkommen in der Delphi-PRAXiS, Raphael.
Dein Problem ist die Funktion UrlEncode - sie ist nur für die einfachsten URLs verwendbar und nicht RFC3986 konform. Insbesondere dürfen square brackets nicht escaped werden. Fürs Erste könntest du in dieser Funktion die beiden Zeichen ausklammern, damit du einen Erfolg siehst. Freundliche Grüße vom marabu |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Hi marabu,
heißt das, dass nach RFC3986
Code:
eine gültige URL ist? Denn damit funktioniert die Übergabe via Post auch nicht. Oder habe ich dich falsch verstanden?
[url]http://persoenlicherfahrplan.bahn.de/bin/pf/query-p2w.exe/dn?protocol=http&seqnr=0&ignore_ident=1&pfmodus=1&transfertype=xml&from=Hemsbach%20[/url][DB]&to=Heidelberg%2C%20Hbf&date_from=13.12.05&date_to=09.12.06&weekday_mo=checked&weekday_tu=checked&weekday_we=checked&weekday_th=checked&weekday_fr=checked&weekday_sa=checked&weekday_su=checked×el=depart&time=12:00&time0_from_hin=0:00&time0_to_hin=23:59&time0_from_rueck=0:00&time0_to_rueck=23:59&answerMode=download&output=pdf&maxNrOfChanges=1000&pr1.1=CHECKED&pr1.2=CHECKED&pr1.3=CHECKED&pr1.4=CHECKED&pr1.5=CHECKED&pr1.6=CHECKED&pr1.7=CHECKED&pr1.8=CHECKED&pr1.9=CHECKED&pr1.10=CHECKED&outputFilter=complete&filter=&start=
jakewalk |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Ich habe mir dein Projekt herunter geladen und mir fällt auf, dass du die Funktion UrlEncode() gar nicht verwendest. Die Routine, wenn du sie denn verwenden würdest weiß gar nichts über den Aufbau eines URI und darf nur zum Kodieren von substrings verwendet werden. Dabei kodiert sie nach der Hau-drauf-Methode alles was sich nicht wehrt - insbesondere alle zugelassenen Sonderzeichen. Das ist nur als Hinweis, keinesfalls die Erklärung für das von dir beobachtete Phänomen.
Laut RFC3986 sind square brackets RESERVERD und müssen durch das percent encoding - hast du richtig gemacht und ich habe gestern die Grammatik falsch gelesen (square brackets gehören nicht zu den zulässigen sub-delims). Ich habe zuerst mit deinem URL und GET die Fahrplanauskunft gequält - da spielt die Bahn nicht mit. Dann habe ich selbst einen Fahrplan von "Hemsbach" nach "Stuttgart" angefordert. Ich werde dann auf die fehlende Eindeutigkeit des Abfahrtbahnhofs hingewiesen und erhalte "Hemsbach [DB]" als Vorauswahl. Ich habe den Quelltext der Seite lokal gespeichert, die form action auf meinen eigenen Server umgeleitet und die POST Variablen mit PHP (5.1.1) analysieren lassen. Ergebnis ist
Code:
Ich hätte statt "#1" den Wert "Hemsbach [DB]" erwartet. Jetzt muss ich aufgrund meiner nur rudimentären PHP-Kenntnisse ergründen, was ich davon halten soll - falls nicht ein PHP-Kenner mitliest.
_POST["from"] = "#1"
Grüße vom marabu |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Hi marabu,
danke erstmal für die Arbeit, die du dir mit der Angelegenheit machst. Das Projekt enthält noch die ältere Version, ich hatte testweise URLEncode() verwendet, aber nicht neu hochgeladen. Das mit der Post-Variable ist schon etwas seltsam. Mich wundert nur, dass es ja funktioniert, wenn man direkt im ![]() jakewalk |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Zitat:
Zitat:
EDIT PHP war schon in Ordnung. Ich vermute, dass der Request mit FROM=Hemsbach%20%5BDB%5D nicht so funktioniert, weil es keine Haltestelle mit dieser Bezeichnung gibt. Drauf gekommen bin ich durch die Untersuchung der Auswahllisten. Nicht alle Start- und Ziel-Adressen werden von der Bahn betrieben, aber die es werden erhalten zur Kenntlichmachung den Zusatz [DB]. Gespeichert wird aber die Adresse ohne den Zusatz und ein gesondertes Attribut (DB). Trägst du nun eine Adresse in eines der Texteingabefelder ein, dann werden alle gespeicherten Adressen ermittelt, die in Frage kommen (wahrscheinlich Präfixsuche) - vermutlich wird dabei ein Suffix [DB] ignoriert. Da "Hemsbach" nicht eindeutig ist, wird eine Auswahlliste erstellt, in der du dann "Hemsbach [DB]" findest. Übermittelt wird aber nur "#1" - der Server weiß ja was er deinem Browser geschickt hatte. Die Bezeichnung ist ab jetzt auch egal, da der Server ab diesem Zeitpunkt mit dem internen Schlüssel für die Adresse arbeitet. Fazit: In vielen Fällen besteht der Server auf einer Rückfrage nebst Auswahlliste. Sein Match-Verfahren zwingt ihn dazu. Ich hoffe ich habe mich verständlich ausdrücken können. marabu |
Re: Problem mit Sonderzeichen bei HTTP Post [ICS]
Hi,
dann komme ich über die Auswahlseite, auf der man den Bahnhof manuell auswählen muss, nicht herum. Aber besser so, als überhaupt nicht. ;-) Meine Umsetzung sieht jetzt so aus, dass ich bei Bahnhöfen, die [DB] enthalten, das [DB] entferne, in der lokal erstellten HTML-Datei im Header <base href="http://persoenlicherfahrplan.bahn.de/"> hinzufüge, damit über die lokale Datei der Auswahldialog erreicht und somit schließlich der Fahrplan erstellt werden kann. Ich hätte gedacht, dass das Problem mit der Kodierung zusammenhängt. So kann man sich irren. Nochmals danke für deine Hilfe marabu! jakewalk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz