Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idHTTP post bad request wegen Sonderzeichen (https://www.delphipraxis.net/182294-idhttp-post-bad-request-wegen-sonderzeichen.html)

Ajintaro 15. Okt 2014 22:55

idHTTP post bad request wegen Sonderzeichen
 
Hallo DP,

es ist spät und ich sehe schon weiße Mäuse.. aber mich wurmt folgendes: ich sende mit folgender Prozedur POST Daten ab:

Delphi-Quellcode:
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//submit_post
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
Procedure submit_post(url_string,EncodedStr:string;amemo:TMemo);
var
  aStream: TMemoryStream;
  Params: TStringStream;
begin
  aStream := TMemoryStream.create;
  Params := TStringStream.create('');

  try
    with Fmain.IdHTTP1 do
    begin
      Params.WriteString(URLEncode(EncodedStr));
      Request.ContentType := 'application/x-www-form-urlencoded';
      try
        Response.KeepAlive := False;
        Post(url_string, params, aStream);
      except
        on E: Exception do showmessage('Error encountered during POST: ' + E.Message);
      end;
    end;
    aStream.WriteBuffer(#0' ', 1);
    aStream.Position := 0;
    amemo.Lines.LoadFromStream(aStream);
  except
    aStream.Free;
    Params.Free;
  end;
end;
Das funktioniert auch soweit prima. In meinen Daten befindet sich aber manchmal ein Telefon-Ländercode: +49 den ich genau so übertragen möchte. Leider ignoriert der Server das +49 und macht daraus 49. Wenn ich es mit %2B49 versuche, gibts als Antwort einen HTTP 1.1 Bad Request 400.

Liegt das an
Delphi-Quellcode:
Params.WriteString(URLEncode(EncodedStr));
?

mkinzler 15. Okt 2014 23:14

AW: idHTTP post bad request wegen Sonderzeichen
 
%2B ist ja schon die codierte Form des +. Bist Du sicher, dass das + nicht beim Empfänger entfernt wird.
+49 ist ja eigentlich nur die Kurzform für 0049 im Zweifel halt dies verwenden.

Ajintaro 16. Okt 2014 11:46

AW: idHTTP post bad request wegen Sonderzeichen
 
Gelöst!

Das Problem war:
Delphi-Quellcode:
Params.Writestring(URLEncode(mystring));
jetzt kann ich das encoding selbst in Form von %2B vornehmen :)

Bernhard Geyer 16. Okt 2014 12:24

AW: idHTTP post bad request wegen Sonderzeichen
 
Zitat:

Zitat von mkinzler (Beitrag 1276096)
+49 ist ja eigentlich nur die Kurzform für 0049 im Zweifel halt dies verwenden.

[Glugscheißermodus an]
+ ist nicht die Kurzvorm für die 00 sondern + gibt an das die Länderspezifische Vorwahl für Internationale Gespräche nötig ist.
00 ist Zufälliger in DE diese Vorwahl. In anderen Ländern sind andere Vorwahlen nötig (http://en.wikipedia.org/wiki/List_of..._call_prefixes)
[Glugscheißermodus off]


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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