Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   IdHTTP HTTPS Post (https://www.delphipraxis.net/155661-idhttp-https-post.html)

ajmbarros 3. Nov 2010 07:52

IdHTTP HTTPS Post
 
Hallo!

Ich habe bereits nach Hier im Forum suchenIdHTTP HTTPS Post gesucht. Ich bin auch hier und da fündig geworden. Allerdings konnte ich mit keinem der Einträge wirklich erfolgreich sein.

Ich habe folgende situation:
Delphi 7
Indy 10

TidHTTP
TIdSSLIOHandlerSocketOpenSSL
ich möchte einen HTTPS-Post verschicken. Ich habe auch schon folgende dll.'s im Programmverzeichniss:
  • libeay32.dll
  • libssl32.dll
  • ssleay32.dll
  • zlib1.dll

Ich kann auch den Request absetzten. Allerdings scheint die Post-Data nicht so anzukommen wie ich sie abschicke. Ich habe ein TMemo dazu benutzt.
Hier er aufruf:

Delphi-Quellcode:
  IdSSLIOHandlerSocketOpenSSL.Open;

  if (Method.ItemIndex = 1)then
    response.Lines.Text := IdHTTP.Post(edurl.Text,request.lines)
  else
    response.Lines.Text := IdHTTP.Get(edurl.Text);
  htmlLite.LoadFromString(response.Lines.Text,'');
* response ist ein TRichEdit.

Ich schicke beispielsweise:

Code:
<?xml version="1.0" encoding="iso-8859-1"?>
und bekomme aber:

Code:
<?xml version="1.0"%20encoding="iso-8859-1"?%3E

Ich habe das gefühl es stimmt was mit der verschlüsslung nicht. Aber was?

ele 3. Nov 2010 11:17

AW: IdHTTP HTTPS Post
 
Die Post Daten sind UrlEncoded. Versuch mal TIdURI.UrlDecode().

mjustin 3. Nov 2010 11:57

AW: IdHTTP HTTPS Post
 
Es könnte an einem Fehlenden Header liegen.

Wenn der POST Request diese Zeile enthält:

Content-Type: application/x-www-form-urlencoded

Dann müsste der Server auch die URLEncode Daten korrekt dekodieren.

Ist jetzt nur geraten. Einfach mal im Indy IdHTTP Source nachschauen (oder einen HTTP Sniffer einsetzen) ...

Hope this helps,

ajmbarros 3. Nov 2010 13:16

AW: IdHTTP HTTPS Post
 
ich glaube ich habe das Problem gefunden.

Es liegt daran das ich Strings genommen habe gebe. Aus irgendeinem Grund löst das folgene funktion in der Komponente aus:

Delphi-Quellcode:
procedure TIdCustomHTTP.EncodeRequestParams(AStrings: TStrings);
var
  i: Integer;
  LPos: integer;
  LStr: string;
begin
  Assert(AStrings<>nil);

  for i := 0 to AStrings.Count - 1 do begin
    //AStrings[i] := AStrings.Names[i] + AStrings.NameValueSeparator + TIdURI.ParamsEncode(AStrings.ValueFromIndex[i]);
    LStr := AStrings[i];
    LPos := IndyPos('=', LStr);
    if LPos > 0 then begin
      AStrings[i] := Copy(LStr, 1, LPos-1) + '=' + TIdURI.ParamsEncode(Copy(LStr, LPos+1, MAXINT));
    end;
  end;
end;
..und zerstört damit mein Post.

Nimmt mann ein Stream (die Post funktion ist überladen) geht es:

request.lines.SaveToStream(poststream);
result.lines := IdHTTP.Post(api_url,poststream);


Danke trotzdem für deinen Tipp...

ajmbarros 3. Nov 2010 13:18

AW: IdHTTP HTTPS Post
 
Frage geschlossen...


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