Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdHTTP, probleme mit Post... (https://www.delphipraxis.net/10178-idhttp-probleme-mit-post.html)

FriFra 13. Okt 2003 09:48


IdHTTP, probleme mit Post...
 
Das Thema gab es zwar schon mehrfach, jedoch ohne brauchbare Lösung...

Ich möchte Daten via HTTP-Post an eine PHP Seite senden

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  data: TIdMultiPartFormDataStream;
begin
  data := TIdMultiPartFormDataStream.Create;
  try
    { add the used parameters for the script }
    data.AddFormField('Wert1', 'value1');
    data.AddFormField('Wert2', 'value2');
    data.AddFormField('Wert3', 'value3');

    data.Position:=0;
    { Call the Post method of TIdHTTP and read the result into TMemo }
    Memo1.Lines.Text := IdHTTP1.Post('http://www.irgendeinedomain.net/upload.php',
      data);
  finally
    data.Free;
  end;
end;
Die Daten kommen jedoch nicht am Ziel an, d.h. die Variablen sind leer...
upload.php
Code:
<?PHP
echo $HTTP_POST_VARS["Wert1"]."
";
echo $HTTP_POST_VARS["Wert2"]."
";
echo $HTTP_POST_VARS["Wert3"]."
";
?>
Mache ich das gleiche über eine HTML-Seite, klappt alles fehlerfrei:
Code:
<html>
<body>
<form action="upload.php" method="POST">
<input type=text name="Wert1" value="value 1">


<input type=text name="Wert2" value="value 2">


<input type=text name="Wert3" value="value 3">


<input type=submit>
</form>
</html>

FriFra 16. Okt 2003 19:45

Re: IdHTTP, probleme mit Post...
 
Weiss denn wirklich niemand, wie man einen richtigen POST-Request mit Indy hinbekommt??? :roll: :gruebel:

SirThornberry 16. Okt 2003 19:48

Re: IdHTTP, probleme mit Post...
 
wenn du im php-script einfach $Wert1 verwendest zeigst dann einen wert an???

FriFra 16. Okt 2003 19:51

Re: IdHTTP, probleme mit Post...
 
Nein, es wird auch dann nichts angezeigt! Wenn ich die Webseite (Beispiel) verwende, dann klappt es ja auch -> Das Script ist OK, Indy (oder ich) macht was falsch...

SirThornberry 16. Okt 2003 19:54

Re: IdHTTP, probleme mit Post...
 
also auf arbeit hab ich nen project rumliegen wo ich sowas auch mache, dort funktioniert auch, komm jetzt aber nicht ran. Wenn deine Felder nur Strings beinhalten benutze mal die idhttp.post variante wo du die parameter in einer Stinglist übergibst.

beispiel:
parameter.add('wert=
wert=value1');

vielleicht liegst an dem "data.position". Das hab ich bei mir so weit ich weiß nie verwendet und es hat trotzdem geklappt;

FriFra 16. Okt 2003 19:57

Re: IdHTTP, probleme mit Post...
 
Das nützt mir nichts, da ich eigentlich auch noch eine Datei übertragen will. Durch diesen Test habe ich aber festgestellt, dass Indy noch nichtmal in der Lage ist einfache Textfelder zu übertragen...

SirThornberry 16. Okt 2003 20:11

Re: IdHTTP, probleme mit Post...
 
Hypothese: Wenn du das try finaly rausnimmst siehst du das nen fehler kommt. Ich nehm an du testest das ganze local und das ist intranet und somit brauchst du die BasicAuthentication da die indycomponente nicht wie der IEExplorer automatich das windowslogin sendet

FriFra 16. Okt 2003 20:21

Re: IdHTTP, probleme mit Post...
 
BasicAuthentication hin oder her, damit hat es nichts zu tun... :cyclops: Es gibt auch keinen Fehler, das Memo wird ja gefüllt
Code:
, nur sind eben die Variablen leer...

Mal ganz davon abgesehen teste ich es nicht lokal, das Script und auch die Testseite liegen auf einem "echten" Webserver im Netz ;)

SirThornberry 16. Okt 2003 20:31

Re: IdHTTP, probleme mit Post...
 
Delphi-Quellcode:
var
  data: TIdMultiPartFormDataStream;
begin
  data := TIdMultiPartFormDataStream.Create;
  data.AddFormField('Wert1', 'value1');
  data.AddFormField('Wert2', 'value2');
  data.AddFormField('Wert3', 'value3');
  idhttp1.Post('http://127.0.0.1/index.htm', data);
  data.free;
bei mir klappts. Oder hastn noch irgendwie nen sourceschnipsel mehr wo eventuell der Fehler drin ist??

FriFra 16. Okt 2003 20:36

Re: IdHTTP, probleme mit Post...
 
Zitat:

Zitat von SirThornberry
Delphi-Quellcode:
var
  data: TIdMultiPartFormDataStream;
begin
  data := TIdMultiPartFormDataStream.Create;
  data.AddFormField('Wert1', 'value1');
  data.AddFormField('Wert2', 'value2');
  data.AddFormField('Wert3', 'value3');
  idhttp1.Post('http://127.0.0.1/index.htm', data);
  data.free;
bei mir klappts. Oder hastn noch irgendwie nen sourceschnipsel mehr wo eventuell der Fehler drin ist??

Woher willst Du denn wissen ob es klappt?! :evil: Du lässt Dir doch nichtmal das Ergebnis ausgeben!!! Ausserdem wird dir eine *.htm Seite wenig nützen... es sollte schon ein php-Script ein, ansonsten ist es nix mit Parametern auswerten :zwinker:
Mein Request geht ja auch "Fehlerfrei" raus, nur kommen die übergebenen Felder/Feldinhalte nicht an :wall:

SirThornberry 16. Okt 2003 20:46

Re: IdHTTP, probleme mit Post...
 
weil ich beim server geguckt hab ob bei dem request die parameter mit kommen. außerdem kann man einen server auch so konfigurieren das er html mit dem php interpreter ausführt. (für lokale zwecke ganz sinnvoll). Habs aber auch mit nem perlscript probiert (da php grad ni geht) und da kommt auch was an

FriFra 16. Okt 2003 20:50

Re: IdHTTP, probleme mit Post...
 
Am Server kannst Du gucken was Du willst :cyclops: , lass Dir bitte mal den Rückgabewert anzeigen, dann siehst Du es :roll: ... Das PHP Script gibt Dir definitiv keine Parameter aus, obwohl es mit der Webseite klappt! :wall: :wall: :wall:

SirThornberry 16. Okt 2003 20:51

Re: IdHTTP, probleme mit Post...
 
könntest ja mal den kompletten source geben, den könnt ich ja dann ma testen bei mir, mit perlscript statt php am ende, kommt aber auf selbe raus.

SirThornberry 16. Okt 2003 20:55

Re: IdHTTP, probleme mit Post...
 
wenn die parameter beim server ankommen liegts nicht an der indy-componente, denn am server kommen die gleichen parameter an, egal ob mit webbrowser abgeschickt oder mit idhttpclient. Nur die Browserrequestsettings unterscheiden sich. Außerdem gehts ja mit perl supi. Oder haste an den Indycomponenten rumgefuscht oder die version10beta davon??? es liegt definitiev nicht an den componenten denn auf arbeit hab ichs auch mit php hinn bekommen auf die gleiche art und weise. irgendwo wirste noch nen fehler im source haben.

Du könntest auch mal die orginal http-addy posten (gegebenfals über private message) damit ichs mit dem phpscript testen kann

FriFra 16. Okt 2003 20:57

Re: IdHTTP, probleme mit Post...
 
ICH HABE DEN KOMPLETTEN SOURCE GEPOSTET :evil: :evil: ... oder wie komplett hättest Du es denn gern?

Langsam habe ich Deine Antworten satt, DU KANNST ES NICHT GETESTET HABEN, WEIL ES NICHT FUNZT!!! :wall: :wall: :wall:


P.S.: An den INDY's wurde nicht "rumgepfuscht", es ist der original Auslieferungszustand von Delphi7 pro

SirThornberry 16. Okt 2003 20:59

Re: IdHTTP, probleme mit Post...
 
Ich habs inzwischen getestet, eben nur mit perl und nicht mit php aber das sollte dabei keine rolle spielen.

FriFra 16. Okt 2003 21:02

Re: IdHTTP, probleme mit Post...
 
Sieh Dir das erste Post an, dort ist der komplette Source der php-Seite... Ausserdem findest Du dort eine html-Seite, die genau dieses Script mit den gleichen Parametern aufruft wie Indy, nur über die Webseite (Browser) klappt es, mit INDY nicht...


Übrigens hab ich noch niemals und nirgends eine wirklich funktionierende POST-Funktion für INDY gefunden... ein "schöner" Test ist ein SMC700xBR Router, der schmiert nämlich komplett ab, wenn man einen Login über Post versucht, obwohl es mit einer Webseite (identische Paramter wie beim INDY Test) klappt.

SirThornberry 16. Okt 2003 21:10

Re: IdHTTP, probleme mit Post...
 
wie schon erwähnt hab ich zurzeit keine möglichkeit php zu testen und für perl klappt das ganze. Deswegen wäre ich über eine url eines phpscripts dankbar welches die ihm übergebenen parameter anzeigt. Oder du wartest bis morgen. Da habsch den Source von unserem webshopeditor der alles über php-script konfiguriert.

FriFra 16. Okt 2003 21:17

Re: IdHTTP, probleme mit Post...
 
Die Frage ist nur, ob ihr das über POST gelöst habt... GET ist nämlich überhaupt kein Problem ;)

Testpage mit Übertgabe der Parameter über POST
PHP-Script zur Anzeige der mit POST übergebenen Parameter

SirThornberry 16. Okt 2003 21:23

Re: IdHTTP, probleme mit Post...
 
wir habens über post gelöst, ansonsten würde es nicht gehen die graphiken für den webshop hoch zu laden. naja, ich probiers mal mit deinem script

SirThornberry 16. Okt 2003 21:36

Re: IdHTTP, probleme mit Post...
 
mit idhttp1.post(url, stringliste) funktionierts. Guck morgen auf arbeit mal warum das mit der anderen Variante (TIdMultiPartFormDataStream) nicht funkioniert

FriFra 16. Okt 2003 21:43

Re: IdHTTP, probleme mit Post...
 
Zitat:

Zitat von SirThornberry
mit idhttp1.post(url, stringliste) funktionierts. Guck morgen auf arbeit mal warum das mit der anderen Variante (TIdMultiPartFormDataStream) nicht funkioniert

Danke schonmal im Voraus ;) Die Variante mit der Stringliste hilft mir aber, wie gesagt, nicht weiter, da ich eigentlich auch Dateien uploaden will...

SirThornberry 16. Okt 2003 22:32

Re: IdHTTP, probleme mit Post...
 
wenn man in der unit:
idmultipartformdata.pas
die zeile:
sContentDisposition = 'Content-Disposition: form-data; name="%s"';
nach
sContentDisposition = 'Content-Disposition: form-data; name="';
abändert funktionierts. Aber werd wie gesagt morgen mal gucken warums auf arbeit klappt, vielleicht ist ja da der fehler nicht in der unit.

==> Manchmal bringts halt doch was zu gucken was der am server ankommt und nicht nur was dann bei php rauskommt...

FriFra 16. Okt 2003 23:32

Re: IdHTTP, probleme mit Post...
 
:oops: Entschuldigung für meine Aufregung vorhin, da hab ich mich wohl etwas zu früh aufgeregt...

Aber irgendwie ist es für mich nicht ganz nachvollziehbar, wie so ein grosser Bug sich in eine Final-Version einschleichen konnte. Mit diesem Bug ist ein POST ja praktisch nicht möglich :freak:
Ich bin ja mal gespannt, wie die Unit bei Dir auf der Arbeit aussieht :?

SirThornberry 17. Okt 2003 13:18

Re: IdHTTP, probleme mit Post...
 
Liste der Anhänge anzeigen (Anzahl: 3)
das ist komich, auf Arbeit sieht die unit genau so aus (also mit der vermeindlichen Bug-Zeile) wie zu Hause. Allerdings funktioniert dort der Source aus deinem ersten post in diesem thread der bei dir und bei mir zu Hause nicht funktioniert hat. Ich poste einfach mal die unit idmultipartformdata.pas und die IdHTTP.pas vielleicht gibts ja da zwischen den versionen irgend ein unterschied. Ich hab auch mal nen Post zum Server durchgeführt - und wunder - siehe da das post sieht genau so aus wie beim ie trotz der vermeindlichen bug-zeile. Kannst ja mal gucken ob es mit den units fehlerfrei funktioniert ansonsten bleibt wohl nur übrig die zeile zu ändern. Allerdings sendet der nen #13#10 dabei zu viel und obs mit atachment klappt weiß ich auch nicht. Also, weiter bug sucehn bleibt da nur übrig wenns mit den units nicht geht.

jensw_2000 27. Nov 2005 12:40

Re: IdHTTP, probleme mit Post...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir ein kleines Spielprojekt angehängt.
Eventuell hilft es dir, dein POST Problem zu lösen ..

Den Quellcode sende ich dir per PN, damit ich mir keinen Ärger mit dem "Mangenta-Logo-Konzern" einfange ...

Schöne Grüße,
Jens

jensw_2000 3. Dez 2005 23:04

Re: IdHTTP, probleme mit Post...
 
Hier mal ein kleines Codebeispiel . Da funktioniert die Parameterübergabe auch ...


Mehrere Parameter kann man wie folgt verketten:

ParamData .WriteString('search=' + Domain);
ParamData .WriteString('&foo=' + 'foo');
ParamData .WriteString('&egal=' + 88 );


Die Parameter werden wie folgt übergeben:

s:=IdHTTP.Post('http://www.iks-jena.de/cgi-bin/whois', ParamData);

oder

s:=IdHTTP.Post('http://www.iks-jena.de/cgi-bin/whois/weissnich.php?', ParamData);


Schöne Grüße,
Jens


:hi:

generic 2. Aug 2006 16:39

Re: IdHTTP, probleme mit Post...
 
ich habe es wie folgt gelöst:

das php programm:
Code:
<?php
  var_dump($_REQUEST);
?>
der delphi teil:
Delphi-Quellcode:
var
  daten: TIdMultiPartFormDataStream;
begin
  daten:=TIdMultiPartFormDataStream.Create;
  try

    daten.AddFormField('testa', 'test1');
    daten.AddFormField('testb', 'test2');
    daten.AddFormField('testc', 'test3');
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    Memo1.lines.text:=IdHTTP1.Post('http://localhost:3000/phpteil.php', daten);
  finally
    daten.free;
  end;
end;


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