Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 18.09.11 02:07 
Hallo,
ich habe ein Memory-Stream, der als Argument in einer URL dienen soll. Das heißt: www.test.de/verarbeiten.php?einstream=derstream.
Da kam ich auf die Idee, den Stream einfach in eine hexadezimale (oder binäre?) Zahl zu wandeln und diese dann als Argument zu benutzen (später dann wieder umwandeln). Nun stellen sich die Fragen, ob das funktioniert und wenn ja, wie? Oder ob es eine andere Methode gibt, einen Stream als Argument für eine PHP-Seite zu verwenden.

Hoffe, dass Ihr viele Ideen habt!

Vielen Dank und Grüße,
Benny
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.09.11 04:33 
Du solltest das mit TIdMultiPartFormDataStream oder so ähnlich und TIdHttp.Post machen können.

Das als GET-Parameter in die URL zu schreiben ist keine gute Idee.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 18.09.11 11:41 
Das Problem ist, dass die Übertragung nicht im Programm statt finden soll, sondern der Link soll bereit gestellt werde.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.09.11 11:54 
Dann würde ich das ganze einfach mit base64 codieren.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 18.09.11 12:01 
Habe mehrere Base64 Klassen im Netzt gefunden, doch in keiner kann ich einen ganzen Stream codieren. Wie funktioniert das dann?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.09.11 12:04 
Lies den Stream vorher einfach in einen AnsiString ein. ;-)
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 18.09.11 12:11 
Gerade habe ich die Unit SZCodeBaseX gefunden (www.koders.com/delph...9E5789046.aspx?s=ftp). Dort gibt es die Funktionen
ausblenden Delphi-Quelltext
1:
2:
function SZEncodeBaseXStream(sIN, sOUT: TStream; Size: integer; const Codes: String; BITS: integer; FullQuantum : integer; MIMELine: integer ): integer;
function SZDecodeBaseXStream(sIN, sOUT: TStream; const Codes: String; BITS: integer): integer;
. Nur dort verstehe ich nicht, wie ich sie verwenden soll. Kannst du mir die beiden Funktionen vom groben Aufbau erklären (wofür sIN,Codes,...?).

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Lies den Stream vorher einfach in einen AnsiString ein. ;-)
Eine URL darf ja im IE nur ca. 2500 Zeichen beinhalten, deshalb ist das eher keine gute Idee.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.09.11 12:24 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Lies den Stream vorher einfach in einen AnsiString ein. ;-)
Eine URL darf ja im IE nur ca. 2500 Zeichen beinhalten, deshalb ist das eher keine gute Idee.
Und der Unterschied gegenüber es nicht zu tun liegt wo? :gruebel:
Die Zeichenanzahl ist doch so oder so gleich.

Im IE habe ich gelesen 2083 Zeichen und andere, bei denen auch mehr ging.

Aber wer soll denn bitte URLs mit derart vielen Zeichen überhaupt benutzen? :shock: Bei mir werden die vom Router aus Sicherheitsgründen direkt geblockt.

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Nur dort verstehe ich nicht, wie ich sie verwenden soll. Kannst du mir die beiden Funktionen vom groben Aufbau erklären (wofür sIN,Codes,...?).
Naja, sIN und sOUT sind doch klar, in sIN ist der Stream mit deinen Daten und in SOUT landet das Ergebnis. Codes und Bits sind nach einem kurzen Blick offenbar SZCodes64URL und SZBITS64. Da ich die Unit nicht kenne, kann ich aber auch nur in den Quelltext schauen. ;-)

Für diesen Beitrag haben gedankt: LittleBen
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 18.09.11 12:34 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Aber wer soll denn bitte URLs mit derart vielen Zeichen überhaupt benutzen? :shock: Bei mir werden die vom Router aus Sicherheitsgründen direkt geblockt.
Stimmt...doch den AnsiString kann ich ja auch nicht direkt in die URL eintragen, da manche Zeichen ja nicht erlaubt sind. Also erst noch in Hexadezimal umwandeln?
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 18.09.11 13:25 
Du sollst den String ERST in einen Ansistring reinschreieben (ja, dann enthält er ungültige Zeichen) und danach dann base64 kodieren. Danach enthält er keine ungültigen Zeichen mehr.

Falls deine Daten zu lang sind, um noch in die URL zu passen ist das so oder so ein Problem. (base64 schlägt nochmal 33% auf die daten drauf...) In diesem Fall solltest du die Daten lieber per POST übertragen.

Für diesen Beitrag haben gedankt: LittleBen