AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke PHPArray über Indy HTTP Post übergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

PHPArray über Indy HTTP Post übergeben?

Ein Thema von Koloss · begonnen am 27. Dez 2019 · letzter Beitrag vom 8. Jan 2020
Antwort Antwort
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#1

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 28. Dez 2019, 17:29
Indy escapet das wohl einfach, wenn du mehrere Parameter in einen reinpackst. Sprich & wird zu %26.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
gabneo

Registriert seit: 15. Okt 2006
Ort: Deutsche Toskana :)
93 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 3. Jan 2020, 18:40
Vielleicht ist JSON in diesem Fall interessant - denn sowohl Delphi als auch PHP verstehen das einwandfrei.

Delphi-Dokumentation: http://docwiki.embarcadero.com/RADStudio/Rio/de/JSON
JSON zu PHP-Array in PHP umwandeln: https://www.php.net/manual/de/function.json-decode.php

Zudem empfehle ich das an den Server per POST zu übermitteln und nicht per URL/GET.

Hier mal etwas pseudo code:

Delphi-Quellcode:
uses JSON, JSON.Types, JSON.Writers, JSON.Builders, Wininet;

procedure post;
var
  inetSession, inetConnection, inetRequest: HINTERNET;
  js, jsElement: TJSONObject;
  JSarray: TJSONArray;
  Parameter:String
begin
  if inetSession = nil then inetSession := InternetOpen(PChar('Delphi App'), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if inetSession = nil then RaiseLastOSError;

  if inetConnection = nil then inetConnection := InternetConnect(inetSession, PChar('###URL z.B.: www.demo.de ###'), INTERNET_DEFAULT_HTTPS_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
  if inetConnection = nil then RaiseLastOSError;

  inetRequest := HttpOpenRequest(inetConnection, PChar('POST'), nil, nil, nil, nil, INTERNET_FLAG_SECURE, 1);
  if inetRequest = nil then RaiseLastOSError;

  //JSON aufbauen
  js := TJSONObject.Create;
  JSarray := TJSONArray.Create;
  jsElement := TJSONObject.Create;
  try
    js.AddPair(TJSONPair.Create('Propertyname', 'ABC'));
    jsElement.AddPair(TJSONPair.Create('arrayElement', TJSONNumber.Create(10)));
    JSarray.AddElement(jsElement);
    js.AddPair(TJSONPair.Create('array', JSarray));
    Parameter := js.ToJSON;
  finally
    jsElement.free;
    JSarray.free;
    js.free;
  end;

  //JSON posten
  if not HttpAddRequestHeaders(inetRequest, PChar(Header), Length(Header), HTTP_ADDREQ_FLAG_ADD) then RaiseLastOSError;
  if not HTTPSendRequest(inetRequest, nil, 0, PAnsiChar(AnsiString(Utf8Encode(Parameter))), length(Utf8Encode(Parameter))) then RaiseLastOSError;
end;
Viele Grüße

Geändert von gabneo ( 3. Jan 2020 um 18:53 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#3

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 3. Jan 2020, 19:45
Vielleicht ist JSON in diesem Fall interessant - denn sowohl Delphi als auch PHP verstehen das einwandfrei.
Hatte er ausgeschlossen, da er an das PHP-Skript nicht rankommt und das wohl kein JSON nimmt sondern die HTTP-Parameter.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 6. Jan 2020, 14:17
Die Frage ist ja nur wie diese Parameter genau aufgebaut sein müssen. Mit PHP hat das erstmal nichts zu tun. PHP ist eine reine Server Spache und da werden per HTTP nur Parameter HTTP-konform übergeben. Was dann serverseitig PHP damit macht, müssen wir nicht wissen. Wir müssen einfach nur wissen wie diese Parameter aufgebbaut sein müssen und da nützt uns eien PHP array erstmals garnichts, da das nichts mit HTTP zu tun hat.

Gibt es denn da keine Doumentation dazu, wenn du da eine existierende Schnittstelle nutzen musst. Gibt es eine funktionierende Demowebsite bei denen? Wenn ja, schau dir mal an wie da die HTTP-Parameter vom Browser übergeben werden (F12 Entwicklertools). Wenn du das mal weisst, ist der Rest ein Kinderspiel.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.118 Beiträge
 
Delphi 2009 Professional
 
#5

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 6. Jan 2020, 17:29
Die Frage ist ja nur wie diese Parameter genau aufgebaut sein müssen. Mit PHP hat das erstmal nichts zu tun. PHP ist eine reine Server Spache und da werden per HTTP nur Parameter HTTP-konform übergeben. Was dann serverseitig PHP damit macht, müssen wir nicht wissen. Wir müssen einfach nur wissen wie diese Parameter aufgebbaut sein müssen und da nützt uns eien PHP array erstmals garnichts, da das nichts mit HTTP zu tun hat.

Gibt es denn da keine Doumentation dazu, wenn du da eine existierende Schnittstelle nutzen musst. Gibt es eine funktionierende Demowebsite bei denen? Wenn ja, schau dir mal an wie da die HTTP-Parameter vom Browser übergeben werden (F12 Entwicklertools). Wenn du das mal weisst, ist der Rest ein Kinderspiel.
Ja und das ist alles geklärt, musst nur hoch scrollen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Koloss

Registriert seit: 21. Jul 2010
74 Beiträge
 
Delphi 2 Desktop
 
#6

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 8. Jan 2020, 13:51
Sorry wegen meines späten Feedbacks.

Mein Problem ist gelöst. Siehe letzter Post von mir !

Ich hatte ja ein Sample von der Schnittstelle nur eben in PHP.

Habe das eh via POST gesendet und nicht mit GET. GET ist angeblich auf 255 Zeichen beschränkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#7

AW: PHPArray über Indy HTTP Post übergeben?

  Alt 8. Jan 2020, 17:22
Habe das eh via POST gesendet und nicht mit GET. GET ist angeblich auf 255 Zeichen beschränkt.
Bei den meisten Servern/Webservern geht mehr im HTTP-Protokoll (oftmals sind bei Webseiten die URLs viel länger), aber natürlich kommt es auch auf den Server drauf an, der dieses GET empfängt und verarbeitet.

PS: Bei GET ist zu beachten, dass diese Aufrufe gern im Log landen und monatelang gespeichert bleiben (z.B. beim Apache),
wo es dann natürlich besser wäre Wichtiges, wie z.B. Passwörter, per POST zu übergeben, anstatt per GET.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:19 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