Delphi-PRAXiS

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

newuser01 31. Okt 2006 14:57


Probleme mit IdHTTP Post
 
Hallo

Ich bekomm das senden von Daten über "IdHTTP" einfach nicht hin :( Über TWebbrowser geht es ohne Probleme (siehe code)

Delphi-Quellcode:
Webbrowser1.Navigate(sURL);
WebBrowser1.OleObject.Document.Forms.item('frm').Elements.item('text').value := reEintrag.Text;
Element := WebBrowser1.OleObject.Document.forms.item(0).elements;

//Button "senden" suchen und anschließend clicken (text abschicken)
for i := 0 to (Element.Length - 1) do
begin

  if (Element.Item(i).Value = 'senden') then
  begin
   Element.Item(i).Click;
  end;

end;  //for

versuch ich es über "IdHTTP" funktioniert es nicht :(

Delphi-Quellcode:
var
sURL:String;
slEintrag:TStringList;
begin

slEintrag := TStringList.Create;

with slEintrag do
begin
  //"text" ist das Eingabeformular auf der Webseite wie oben bei TWebbrowser
  Add('text='+ reEintrag.Text);
end;

try
  btnSend.Font.Color := clRed;
  btnSend.Caption := 'wird gesendet...';
  btnSend.Update;

  IdHTTP1.Post(sURL,slEintrag);

  btnSend.Font.Color := clBlack;
  btnSend.Caption := 'Senden';
  btnSend.Update;

except
  MessageDlg('Senden fehlgeschlagen', mtError, [mbOK], 0);
  btnSend.Font.Color := clBlack;
  btnSend.Caption := 'Senden';
  btnSend.Update;
end; //try
slEintrag.Free;

newuser01 4. Nov 2006 21:46

Re: Probleme mit IdHTTP Post
 
hat keiner eine Idee oder ein Tipp ? :(

marabu 5. Nov 2006 08:29

Re: Probleme mit IdHTTP Post
 
Guten Morgen Holger,

du musst die Komponente TIdMultiPartFormDataStream einsetzen. Suche in der DP mal nach Hier im Forum suchenAddFile - da solltest du einige Hinweise erhalten.

Grüße vom marabu

DocE 5. Nov 2006 09:33

Re: Probleme mit IdHTTP Post
 
Hallo Holger,

Zitat:

Zitat von marabu
du musst die Komponente TIdMultiPartFormDataStream einsetzen. Suche in der DP mal nach AddFile - da solltest du einige Hinweise erhalten.

So wie das aussieht, möchte Holger gar keine Datei versenden, sondern einfache Formular-Daten.

Im Prinzip müsste das so klappen, wie Du das machst. Was für ein Fehler kommt denn? Ist "sURL" überhaupt gesetzt?


Grüsse
...Doc

marabu 5. Nov 2006 10:01

Re: Probleme mit IdHTTP Post
 
Irgendwie hatte sich bei mir der Eindruck verfestigt, dass Holger am Versand von Dateien (Daten) scheiter. Bei simplen Formularfeldern sollte die Methode AddFormField() helfen.

Freundliche Grüße

DocE 5. Nov 2006 10:05

Re: Probleme mit IdHTTP Post
 
Zitat:

Zitat von marabu
Irgendwie hatte sich bei mir der Eindruck verfestigt, dass Holger am Versand von Dateien (Daten) scheiter. Bei simplen Formularfeldern sollte die Methode AddFormField() helfen.

Stimmt, sieht auch auf den ersten Blick so aus. Das ganze müsste aber auch ohne "AddFormField()" o.ä. funktionieren, eigentlich auch so wie es programmiert ist. Deshalb würde ich doch gerne wissen, welcher Fehler auftritt. Der Fehler liegt vermutlich eher woanders (z.B. sURL nicht gesetzt, aufgerufene(s) Seite/Script unterstützt nur GET, nicht POST, es fehlen wichtige Parameter o.ä.).

DocE 5. Nov 2006 10:11

Re: Probleme mit IdHTTP Post
 
Noch etwas,

vielleicht liegt es auch nur daran, dass Du das Ergebnis nicht verarbeitest:

Delphi-Quellcode:
var HTMLResult: string;
  (...)
  // Ergebnis (empfangene Seite) geht verloren, sofern nicht irgendwie anders "abgefangen":
  //IdHTTP1.Post(sURL,slEintrag);
  // also z.B.
  HTMLResult := IdHTTP1.Post(sURL,slEintrag);
  // Empfangene Seite steht jetzt in HTMLResult

newuser01 5. Nov 2006 11:19

Re: Probleme mit IdHTTP Post
 
Hallo

Also erstmal danke für eure Hilfe. Eine Fehlermeldung kommt nicht und sURL ist auch gesetzt. Mit WebBrowser1 geht es ja dort wird das Formular (WebBrowser1.OleObject.Document.Forms.item('frm'). Elements.item('text').value := reEintrag.Text;) mit Formulardaten gefüllt und anschließend der "Senden" Button gesucht und betätigt. Liegt es vielleicht daran das genau dieser Button nicht betätigt wird oder hat dies bei IdHTTP keine Bedeutung?

newuser01 5. Nov 2006 11:42

Re: Probleme mit IdHTTP Post
 
Delphi-Quellcode:
procedure TForm1.btnSendClick(Sender: TObject);
var
sURL:String;
data: TIdMultiPartFormDataStream;
begin

data := TIdMultiPartFormDataStream.Create;
sURL := eGB.Text;
data.AddFormField('text', reEntry.Text);
Memo1.Text := IdHTTP1.Post(sURL, data);

end;
So geht es auch nicht kommt auch keine Fehlermeldung

Hat es vielleicht mit (('frm')) was zu tun? weil bei Webbrowser dieses (Document) ja auch erst aufgerufen wird und dann ja erst das (Elements.item('text')). Aber eigentlich ist die Seite mit dem entsprechendem Formular was ausgefüllt werden soll ja bei (sURL) schon gesetzt

marabu 5. Nov 2006 15:13

Re: Probleme mit IdHTTP Post
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Holger,

ich habe eine kleine Demo erstellt, bei der du die Daten interaktiv per WebBrowser oder per Indy HTTP Client an einen internen Server (Port 8080) schicken kannst. Ich übergebe das Textfeld ohne IdMultiPartFormDataStream. Vielleicht findest du beim Studieren der Demo deinen Fehler.

Freundliche Grüße

newuser01 5. Nov 2006 17:56

Re: Probleme mit IdHTTP Post
 
Hallo marabu auch mit diesen Code wird das entsprechende Gästebuch auf der Seite nicht mit den Text von Richedit gefüllt und abgeschickt. Keine Ahnung woran es noch liegen könnte wie gesagt über TWebbrowser funktioniert es.

Delphi-Quellcode:
procedure TForm1.btnSendClick(Sender: TObject);
var
sURL:String;
slEntry:TStrings;

begin

  sURL := eGB.Text; //Gästebuchseite entsprechende Formular was mit (IdHTTP1.Post) ausgefüllt und abgeschickt werden soll
  slEntry := TStringList.Create;
  slEntry.Values['text'] := RichEdit.Text;

  IdHTTP1.Post(sURL,slEntry);

end;

marabu 5. Nov 2006 18:19

Re: Probleme mit IdHTTP Post
 
Ich kann aus deiner Beschreibung nicht zweifelsfrei erkennen, ob du den richtigen Wert an sURL zugewiesen hast. Es muss der Wert des
ACTION-Attributes der fraglichen Form sein, was nicht unbedingt identisch mit dem URL der Gästebuchseite sein muss.

Grüße

newuser01 5. Nov 2006 18:24

Re: Probleme mit IdHTTP Post
 
Ich habe mal schnell ein ähnliches Gästebuch eingerichtet das Textfeld (Gästebuch) ist ebenfalls laut Quelltext von(<input type="text" genau in so einen Textfeld muss der Text zb. aus RichEdit eingefügt und dann abgeschickt werden. Ich denke mal das euch das ein wenig weiter bringt zumindest wisst ihr jetzt was das Ziel ist

marabu 5. Nov 2006 18:43

Re: Probleme mit IdHTTP Post
 
Das Eintragen des Textes funktioniert auf jeden Fall. Gästebücher im Netz werden aber spätestens nach dem ersten spam gegen automatisierte Einträge geschützt. Eine Maßnahme ist hier die Vergabe eines Schlüssels in einem hidden field. Die hidden fields musst du natürlich mitübertragen, sonst wird das nix. Dein Programm muss sich den Schlüssel aber auch zuerst geben lassen (Neuer Eintrag). Ich klinke mich jetzt aus. Viel Spaß noch.

Grüße

newuser01 5. Nov 2006 18:57

Re: Probleme mit IdHTTP Post
 
was für Schlüssel? ich versteh nur Bahnhof :mrgreen:

mkinzler 5. Nov 2006 19:01

Re: Probleme mit IdHTTP Post
 
Den Wert des hidden-Feldes, den die Seite zur sicherheit generiert.

newuser01 5. Nov 2006 19:16

Re: Probleme mit IdHTTP Post
 
Wie bekomm ich diesen raus? und wie muss ich dann den Schlüssel mit dem Text zusammen mitschicken? Mit der Webbrowser Komponente brauchte ich dies nicht. Ich vermute mal weil dieser das automatisch macht wie ein normaler Browser halt.

mkinzler 5. Nov 2006 19:20

Re: Probleme mit IdHTTP Post
 
Zitat:

Ich vermute mal weil dieser das automatisch macht wie ein normaler Browser halt.
Genau.
Zitat:

Wie bekomm ich diesen raus?
Aus HTML-Datei auslesen.
Zitat:

und wie muss ich dann den Schlüssel mit dem Text zusammen mitschicken?
Genauso wie die sichtbaren Felder.

newuser01 5. Nov 2006 19:50

Re: Probleme mit IdHTTP Post
 
Zitat:

Aus HTML-Datei auslesen

Muss ich den Quelltext der Gästebuchseite auslesen? und muss das für jeden neuen Eintrag ins Gästebuch wiederholt werden? Nach was genau muss ich dann im Quelltext suchen? denn Schlüsselwert kann ja viel bedeuten :-D Ein Gästebuch Beispiel zum testen hab ich ja schon angegeben könntest du mir an diesen Beipiel weiterhelfen?

mkinzler 5. Nov 2006 20:01

Re: Probleme mit IdHTTP Post
 
Schau dir doch mal den Code des Formulars mal genauer an, ob dort ein solches feld vorhanden ist.

newuser01 5. Nov 2006 20:47

Re: Probleme mit IdHTTP Post
 
das einzige Feld was ich finde ist eben das Gästebuch selber also (guestbook(document.forms["frm"].text)) hier mal der gesamte Code


Code:
<script type="text/javascript" language="javascript">
function initcharsleft()
{
guestbook(document.forms["frm"].text);
}
   
function guestbook(feld)
{
var anz = feld.value.length;
if (anz> 500)
{
feld.value = feld.value.substring(0,500);frei = 0;
}

}
</script>

<form action="/guestbook/" method="post" name="frm">
<table border="0" cellpadding="0" cellspacing="0" align="center" width="400">   
   <input type=hidden name="p" value="MakeGuestbookEntry798">

<input type=hidden name="a" value="send">
   
   <tr>
      <td height="18" nowrap="nowrap" align="right">eintragin:</td>
      <td width="350">[b]testguestbook's[/b] g&auml;stebuch</td>
   </tr>
   <tr>

      <td height="18" align="right">von:</td>
      <td>[b]<input type="hidden" name="from" value="unregistered">unregistered[/b]</td>
   </tr>
   <tr>
      <td colspan="2"><textarea class="form" name="text" wrap="virtual" style="width:400px; height:70px;" onFocus="guestbook(this)" onBlur="guestbook(this)" onKeydown="guestbook(this)" onKeyup="guestbook(this)"></textarea></td>
   </tr>
   <tr><td height="5"></td></tr>

   <tr>
      <td colspan="2" align="right">      
      
      <input type="submit" class="submit" value="senden" name="submit">
      
      <!--
      <input type="button" class="submit" value="senden" name="submit" title="">
      -->      
      </td>
   </tr>   
</table>
</form>

mkinzler 5. Nov 2006 21:00

Re: Probleme mit IdHTTP Post
 
Es gibt verschiedene hidden-Felder
p mit dem wert MakeGuestbookEntry798: Ist das 798 Fest oder verändert sich das?
a mit Wert 'send'
from mit Wert 'unregistered'

newuser01 5. Nov 2006 21:50

Re: Probleme mit IdHTTP Post
 
Zitat:

p mit dem wert MakeGuestbookEntry798: Ist das 798 Fest oder verändert sich das?

scheint fest zu sein also ändert sich nicht

newuser01 7. Nov 2006 09:51

Re: Probleme mit IdHTTP Post
 
Wie genau funktioniert das nun mit dem hidden Feld und Schlüssel? Ich komme einfach nicht weier vielleicht könnte mir ja jemand das
noch ein wenig genauer erklären an einem kleinen Beispiel oder so

newuser01 9. Nov 2006 14:19

Re: Probleme mit IdHTTP Post
 
:wall:

SirThornberry 9. Nov 2006 14:52

Re: Probleme mit IdHTTP Post
 
das Hidden bezieht sich nur auf die Darstellung. Beim senden von Formulardaten werden diese "hidden"-Felder genau so behandelt wie normale Input-Felder, Buttons, Checkboxen etc.

Wenn du also im Webbrowser auf Absenden klickst werden die Hidden-Felder mit gesendet. Gleiches musst du also auch bei IdHTTP machen.
Delphi-Quellcode:
var
  lParams : TStringList;
begin
  lParams := TStringList.Create();
  lParams.Add('p=MakeGuestbookEntry798');
  lParams.Add('a=send');
  [...]
  IdHttp.Pos(URL, lParams);
end;

newuser01 9. Nov 2006 15:50

Re: Probleme mit IdHTTP Post
 
Hallo Jens soweit ich es verstanden habe muss also eine bestimmte Reihenfolge eingehalten werden , oder? also erst neues Gästebuch erzeugen dann input (text) mit entsprechenden Text füllen und dann submit (send) u.s.w Aber welches ist nun das eigentliche Gästebuchformular und wie wäre laut dem Quelltext der Webseite die richtige Reihenfolge zum abarbeiten? oder versteh ich immer noch Bahnhof? :mrgreen:

Delphi-Quellcode:
procedure TForm1.btnSendClick(Sender: TObject);
var
sURL:String;
slEntry:TStringList;
begin

//so wohl doch nicht :-)
  sURL := eGB.Text;
  slEntry := TStringList.Create;
  slEntry.Add('p=MakeGuestbookEntry798');
  slEntry.Add('text='+reEntry.Text);
  slEntry.Add('a=send');

  IdHTTP1.Post(sURL,slEntry);

SirThornberry 9. Nov 2006 15:52

Re: Probleme mit IdHTTP Post
 
die Reihenfolge spielt keine Rolle es geht nur darum das wirklich alle Felder gesendet werden (auch die hidden). Bei dir fehlt im moment mindestens "from" und "submit" (und die entsprechenden Werte)

newuser01 9. Nov 2006 16:33

Re: Probleme mit IdHTTP Post
 
es funktioniert !! :dp: noch eine Frage hab ich funktioniert das auch so beim login denn da bekomm ich die Fehlermeldung
(HTTP/1.1 302 Moved)


hier mal der Quelltext der Webseite

Code:
<div id="nav">
   <table border="0" cellpadding="0" cellspacing="0" width="160">
      <tr>
         <td>[url="/"][img]http://img.uboot.com/i/int/main/logo.gif[/img][/url]</td>
      </tr>   
      <tr>
         <td align="center" bgcolor="#141414">

                        <table border="0" cellpadding="0" cellspacing="0" width="140" bgcolor="#333333">
               <form name="enternick" action="/ger/" method="POST" style="margin:0px">
               <input type="hidden" name="a" value="login">
               <tr>
                  <td>[img]http://img.uboot.com/i/int/main/nav_einloggen.gif[/img]</td>
               </tr>
               <tr>
                  <td align="center" class="error"></td>
               </tr>

               <tr>
                  <td align="center">
                     <table border="0" cellpadding="1" cellspacing="0">
                        <tr>
                           <td align="center" class="small">[b]nickname[/b]</td>
                        </tr>
                        <tr>
                           <td align="center"><input name="unickname" type="text" size=13 style="width:120px" value="" tabindex="1" class="form"></td>

                        </tr>
                        <tr>
                           <td align="center" class="small">[b]passwort[/b]</td>
                        </tr>
                        <tr>
                           <td align="center"><input name="password" type="password" size=13 style="width:120px" tabindex="2" class="form"></td>
                        </tr>
                        <tr>

                           <td align="center" height="28"><input type="submit" value="login" class="submit"></td>
                        </tr>
                        <tr>
                           <td nowrap="nowrap">                           
                           [url="/register/ger/"]registrieren[/url][url="javascript:cash('/requestnewpassword/ger/')"]passwort?[/url]
                           </td>
                        </tr>
                     </table>

                  </td>
               </tr>
               <tr>
                  <td>[img]http://img.uboot.com/i/int/main/nav_box_down.gif[/img]</td>
               </tr>
               </form>
            </table>
         </td>
      </tr>

   </table>

und hier mein Versuch

Delphi-Quellcode:
  slLogin := TStringList.Create;
  slLogin.Add('a=login');
  slLogin.Add('unickname='+ eUsername.Text);
  slLogin.Add('password='+ ePasswort.Text);
  slLogin.Add('submit=login');

  IdHTTP1.Post(sURL, slLogin);

newuser01 9. Nov 2006 17:34

Re: Probleme mit IdHTTP Post
 
so gehts auch aber ist es auch die beste Lösung :-D

Delphi-Quellcode:
IdHTTP1.Request.Username := eUsername.Text;
IdHTTP1.Request.Password := ePasswort.Text;
IdHTTP1.Get(sURL);


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