AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

Ein Thema von SubData · begonnen am 19. Feb 2010 · letzter Beitrag vom 18. Mär 2010
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#1

Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 19. Feb 2010, 10:52
Ich musste vor Kurzem feststellen, dass Parameter, die aus Firefox heraus mittels jQuery.post an
einen Indy HTTP-Server übergeben werden, nicht verwendet werden können.

Code:
 $.post('/test', { p1: '1', p2: '2' }, null);
Die Paramter sind über ARequestInfo.FormParams sehr wohl zu sehen, können aber mit
ARequestInfo.Params.Values nicht angesprochen werden.
Nach einiger Suche ist mir dann aufgefallen, dass Firefox im Gegensatz zu, zum Beispiel Opera,
als Content-Type nicht "application/x-www-form-urlencoded" sondern
"application/x-www-form-urlencoded; charset=UTF-8" sendet, was Indy dazu veranlasst, nicht
LRequestInfo.UnparsedParams sondern LRequestInfo.QueryParams zu verwenden.

IdCustomHTTPServer.pas (Zeile 859 - 866)
Delphi-Quellcode:
if ParseParams then begin
  if TextIsSame(LRequestInfo.ContentType, 'application/x-www-form-urlencoded') then begin {Do not Localize}
    LRequestInfo.DecodeAndSetParams(LRequestInfo.UnparsedParams);
  end else begin
    // Parse only query params when content type is not 'application/x-www-form-urlencoded' {Do not Localize}
    LRequestInfo.DecodeAndSetParams(LRequestInfo.QueryParams);
  end;
end;
Ich habe mir an dieser Stelle damit geholfen, dass ich Zeile 860 durch folgende ersetzt habe:

if TextIsSame(LRequestInfo.ContentType, 'application/x-www-form-urlencoded') or TextIsSame(LRequestInfo.ContentType, 'application/x-www-form-urlencoded; charset=UTF-8') then begin {Do not Localize} Preisfrage: Habe ich etwas übersehen, oder ist das tatsächlich ein Bug in den Indys?

Nachtrag: jQuery.get funktioniert auch mit Firefox ohne Probleme.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 15. Mär 2010, 23:37
Hallo,

danke fürs Melden, wird gefixt! Sobald unser Fix steht, poste ich hier ggf.

Gruß,
Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 09:28
Sehr schön, vielen Dank.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 11:46
Was für eine Indy-Version?

Der Fehler ist mir schon eine Weile bekannt - dachte allerdings, dass er in der aktuellen Indy-Version behoben worden ist (oder zumindest ist mir der Fehler in meinen Delphi 2010 Projekten noch nicht über den Weg gelaufen).

Der Patch bei mir ist deinem sehr ähnlich, mit dem Unterschied, dass es bei mir egal ist, ob jetzt dahinter UTF-8, ISO-8859-1 oder sonstwas steht (nicht dass ich sowas je gesehen hätte, aber man will ja für alle Fälle gewappnet sein):

Delphi-Quellcode:
s := LRequestInfo.ContentType;
if TextIsSame(Fetch(s, ';', false), 'application/x-www-form-urlencoded') then begin {Do not Localize}
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 11:51
Delphi 7 mit der letzten Indy aus dem Repository (zum Zeitpunkt des Originalbeitrags).

Ich ging ursprünglich nicht davon aus, dass es überhaupt ein Fehler in den Indys ist,
sondern dachte, dass ich wahrscheinlich etwas falsch gemacht habe.
Daher auch nur dieser "provisorische" Fix.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 12:20
Hm... ok. Das sind soviel ich weiss nicht die aktuellsten Indy-Sources. Für die neuesten Sourcen musst du den Tiburon-Branch auschecken. Dort ist der Fehler nicht mehr vorhanden (meine ich zumindest).

Allerdings musst du damit aufpassen, da Tiburon das ganze Unicode und Encoding-Zeugs enthält. Du musst hauptsächlich darauf achten, dass ResponseInfo.CharSet einen sinnvollen Wert erhält. Wenn du z.B. ein Bild über den HTTP-Server lieferst wirst du ziemlich bald merken wenn es nicht geht, denn dann ist das Bild korrupt, da einzelne Zeichen falsch codiert werden.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 12:33
Wie jetzt?

http://indy.fulgan.com/ZIP/

Die indy10.zip ist nicht aktuell?
Warum hat die dann immer ein aktuelles Datum?!
Na toll -.-
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 12:35
Ich glaube, das liegt daran, dass die Automatisch erstellt werden...

IndyTiburon.zip ist die aktuellste Version nach meinem Kenntnisstand.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 12:57
In der ist der Fehler aber ebenfalls enthalten.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Indy 10 (HTTP-Server), Firefox 3.5 und jQuery.post

  Alt 16. Mär 2010, 14:13
Hast du das getestet oder einfach mal kurz den Code überflogen?

Weil in meinen Source steht


Delphi-Quellcode:
              
if ParseParams then begin
  if TextIsSame(LContentType, ContentTypeFormUrlencoded) then begin
    LRequestInfo.DecodeAndSetParams(LRequestInfo.UnparsedParams);
  end else begin
    // Parse only query params when content type is not 'application/x-www-form-urlencoded' {Do not Localize}
    LRequestInfo.DecodeAndSetParams(LRequestInfo.QueryParams);
  end;
und LRequestInfo ist

LContentType := ExtractHeaderItem(LRequestInfo.ContentType); und da ExtractHeaderItem folgendes macht

Delphi-Quellcode:
function ExtractHeaderItem(const AHeaderLine: String): String;
var
  s: string;
begin
  // Store in s and not Result because of Fetch semantics
  s := AHeaderLine;
  Result := Trim(Fetch(s, ';')); {do not localize}
end;
müsste es meiner Meinung nach funktionieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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 21:45 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