![]() |
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; |
Re: Probleme mit IdHTTP Post
hat keiner eine Idee oder ein Tipp ? :(
|
Re: Probleme mit IdHTTP Post
Guten Morgen Holger,
du musst die Komponente TIdMultiPartFormDataStream einsetzen. Suche in der DP mal nach ![]() Grüße vom marabu |
Re: Probleme mit IdHTTP Post
Hallo Holger,
Zitat:
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 |
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 |
Re: Probleme mit IdHTTP Post
Zitat:
|
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 |
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? |
Re: Probleme mit IdHTTP Post
Delphi-Quellcode:
So geht es auch nicht kommt auch keine Fehlermeldung
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; 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 |
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 |
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; |
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 |
Re: Probleme mit IdHTTP Post
Ich habe mal schnell ein ähnliches
![]() |
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 |
Re: Probleme mit IdHTTP Post
was für Schlüssel? ich versteh nur Bahnhof :mrgreen:
|
Re: Probleme mit IdHTTP Post
Den Wert des hidden-Feldes, den die Seite zur sicherheit generiert.
|
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.
|
Re: Probleme mit IdHTTP Post
Zitat:
Zitat:
Zitat:
|
Re: Probleme mit IdHTTP Post
Zitat:
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? |
Re: Probleme mit IdHTTP Post
Schau dir doch mal den Code des Formulars mal genauer an, ob dort ein solches feld vorhanden ist.
|
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ä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> |
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' |
Re: Probleme mit IdHTTP Post
Zitat:
scheint fest zu sein also ändert sich nicht |
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 |
Re: Probleme mit IdHTTP Post
:wall:
|
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; |
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); |
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)
|
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); |
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