AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Sonderzeichen bei HTTP Post [ICS]

Problem mit Sonderzeichen bei HTTP Post [ICS]

Ein Thema von jakewalk · begonnen am 13. Dez 2005 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
Benutzerbild von jakewalk
jakewalk

Registriert seit: 13. Dez 2005
4 Beiträge
 
#1

Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 13. Dez 2005, 13:30
Hi,

ich habe ein Problem mit HTTP Posts, die ich über die ICS erstelle. Das Problem ist aber unabhängig von der Komponente, da es auch bei der Eingabe über den Browser auftritt.

Wenn ein Parameter eckige Klammern enthält, versteht offensichtlich der Server meine Anfrage nicht. Dieser Code funktioniert beispielsweise nicht.

Code:
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&timesel=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=
Dieser aber schon:

Code:
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&timesel=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=
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.

Ich verwende die Funktion URLEncode aus der httpprot.pas zum Kodieren der Sonderzeichen.

Das Problem tritt lediglich bei den Klammern auf, Leerzeichen werden kodiert akzeptiert. Wie komme ich dem Problem auf die Schliche?

Der komplette Quelltext kann hier heruntergeladen werden, allerdings tritt das Problem ja auch im Browser auf.

jakewalk
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 13. Dez 2005, 13:50
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
  Mit Zitat antworten Zitat
Benutzerbild von jakewalk
jakewalk

Registriert seit: 13. Dez 2005
4 Beiträge
 
#3

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 13. Dez 2005, 23:33
Hi marabu,

heißt das, dass nach RFC3986

Code:
[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&timesel=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=
eine gültige URL ist? Denn damit funktioniert die Übergabe via Post auch nicht. Oder habe ich dich falsch verstanden?

jakewalk
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 14. Dez 2005, 10:35
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:
_POST["from"] = "#1"
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.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von jakewalk
jakewalk

Registriert seit: 13. Dez 2005
4 Beiträge
 
#5

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 14. Dez 2005, 11:26
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 Formular Hemsbach [DB] als Bahnhof einträgt. Dann kommt kein weiterer Auswahldialog, sondern direkt das Fenster, dass der Fahrplan erstellt wird. Irgendwie muss es das HTML-Formular ja auch schaffen, den Bahnhof an den Server zu übergeben.

jakewalk
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 14. Dez 2005, 13:15
Zitat von jakewalk:
Mich wundert nur, dass es ja funktioniert, wenn man direkt Hemsbach [DB] als Bahnhof einträgt.
Den Zwischenschritt habe ich nur eingelegt, um die Seite in genau dem Zustand umleiten zu können, der mich interessiert.

Zitat von jakewalk:
Irgendwie muss es das HTML-Formular ja auch schaffen, den Bahnhof an den Server zu übergeben.
Das tut es ja auch. Der Test mit PHP ist vielleicht etwas unglücklich. Ich werde noch einen weiteren Test mit einer anderen ASP-Lösung machen.

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
  Mit Zitat antworten Zitat
Benutzerbild von jakewalk
jakewalk

Registriert seit: 13. Dez 2005
4 Beiträge
 
#7

Re: Problem mit Sonderzeichen bei HTTP Post [ICS]

  Alt 15. Dez 2005, 10:08
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz