Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Hilfe mit IdHTTP - IOHandler value is not valid... (https://www.delphipraxis.net/49438-hilfe-mit-idhttp-iohandler-value-not-valid.html)

smartmod 11. Jul 2005 13:54


Hilfe mit IdHTTP - IOHandler value is not valid...
 
Hi,

ich versuche schon seit 3 Tagen eine PHP Seite über die Post Funktion von IndyHttp aufzurufen, bekomme aber ständig die Fehlermeldung "IOHandler value is not valid".

Bitte sagt mir, was ich falsch mache...

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var
  data: TIdMultiPartFormDataStream;
begin
  data := TIdMultiPartFormDataStream.Create;
  try
    { add the used parameters for the script }

{ Daten für UPS Login:}
{   data.AddFormField('sret', 'http://www.ups.com/content/de/de/index.jsx');
    data.AddFormField('uret', 'http://www.ups.com/content/de/de/index.jsx');
    data.AddFormField('userid', 'smartmod');
    data.AddFormField('password', 'xxxxxxx'); }

{ Daten für Dresnder Bank Login }
    data.AddFormField('identifier', '12345678');
    data.AddFormField('lqp', '123456');

{ Call the Post method of TIdHTTP and read the result into TMemo }
    Memo1.Lines.Text := IdHTTP1.Post('https://www1.dresdner-privat.de/servlet/P/SSA_MLS_PPP_INSECURE_P/pinLogin.do?', data);
  finally
    data.Free;
  end;
end;
Danke schonmal an alle!

DGL-luke 11. Jul 2005 15:22

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
sag uns mal ob du überhaupt einen IOHandler bei deinem IdHTTP registriert hast. davon sieht man nämlich hier nix.

Chris1986 11. Jul 2005 15:36

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
Hi smartmod,
du musst die Parameter in einer Stringlist mit folgendem Format übergeben:
Delphi-Quellcode:
SL.Add('deinersterparameter=deinersterwert');
SL.Add('deinzweiterparameter=deinzweiterwert');

memo1.lines.Add(idhttp1.post('deineDomain', SL)));
Gruß
Christian

smartmod 11. Jul 2005 19:34

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
Zitat:

Zitat von DGL-luke
sag uns mal ob du überhaupt einen IOHandler bei deinem IdHTTP registriert hast. davon sieht man nämlich hier nix.

Hallo!

Bin nicht so wirklich into Delphi... Wie kann ich das überprüfen/machen?

Chris1986 11. Jul 2005 19:53

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
Zitat:

Zitat von smartmod
Zitat:

Zitat von DGL-luke
sag uns mal ob du überhaupt einen IOHandler bei deinem IdHTTP registriert hast. davon sieht man nämlich hier nix.

Hallo!

Bin nicht so wirklich into Delphi... Wie kann ich das überprüfen/machen?

wenn du auf mich hören würdest, wäre dein Problem schon gelöst :roll:

smartmod 11. Jul 2005 19:56

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
Zitat:

Zitat von Chris1986
Zitat:

Zitat von smartmod
Zitat:

Zitat von DGL-luke
sag uns mal ob du überhaupt einen IOHandler bei deinem IdHTTP registriert hast. davon sieht man nämlich hier nix.

Hallo!

Bin nicht so wirklich into Delphi... Wie kann ich das überprüfen/machen?

wenn du auf mich hören würdest, wäre dein Problem schon gelöst :roll:

Nope, leider nicht... Hab den Code zwischenzeitlich angepasst:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, ComCtrls, Menus, Grids, StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdMultipartFormData;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Panel1: TPanel;
    MainMenu1: TMainMenu;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet6: TTabSheet;
    Image1: TImage;
    Datei1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Bearbeiten2: TMenuItem;
    NeueBestellung1: TMenuItem;
    Datei2: TMenuItem;
    Beenden1: TMenuItem;
    ListBox1: TListBox;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Edit6: TEdit;
    Edit7: TEdit;
    Label8: TLabel;
    Edit8: TEdit;
    Label9: TLabel;
    Edit9: TEdit;
    Label10: TLabel;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Edit15: TEdit;
    Label16: TLabel;
    Label17: TLabel;
    Edit16: TEdit;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Button1: TButton;
    Button2: TButton;
    GroupBox3: TGroupBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    GroupBox4: TGroupBox;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Button9: TButton;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    Edit17: TEdit;
    Edit18: TEdit;
    procedure Label19Click(Sender: TObject);
    procedure Label18Click(Sender: TObject);
    procedure Label20Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Label19Click(Sender: TObject);
begin
  if Label19.Font.Color = clSilver then
    begin
    Label19.Font.Color := clGreen;
    end
  else
  begin
    Label19.Font.Color := clSilver;
  end;
end;

procedure TForm1.Label18Click(Sender: TObject);
begin
  if Label18.Font.Color = clSilver then
    begin
    Label18.Font.Color := clGreen;
    end
  else
  begin
    Label18.Font.Color := clSilver;
  end;
end;

procedure TForm1.Label20Click(Sender: TObject);
begin
  if Label20.Font.Color = clSilver then
    begin
    Label20.Font.Color := clGreen;
    end
  else
  begin
    Label20.Font.Color := clSilver;
  end;

end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.Button8Click(Sender: TObject);
var
  data: TStringList;
begin
  data := TStringList.Create;
  try
    { add the used parameters for the script }
    data.Add('sret=http://www.ups.com/content/de/de/index.jsx');
    data.Add('uret=http://www.ups.com/content/de/de/index.jsx');
    data.Add('userid=smartmod');
    data.Add('password=xxxxxxxx');
    {Call the Post method of TIdHTTP and read the result into TMemo}
    Memo1.Lines.Add(idhttp1.Post('https://wwwapps.ups.com/cclamp/login', data));
  finally
    data.Free;
  end;
end;

end.
(Hab mal alles gepostet zur besseren Übersicht)

... aber bekomme beim Click auf Button8 immer noch "IOHandler value is not valid!"

Danke für Eure Hilfe übrigens!

Edit: Ach ja, wenn ich das Ding über eine HTML Seite aufrufe (also einen Button mit Post Funktion mache) dann geht es ohne Probleme.

Chris1986 11. Jul 2005 20:02

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
hm,
ersetz mal deine uses-Liste mit der hier:
Delphi-Quellcode:
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, ComCtrls, Menus, Grids, StdCtrls,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP
edit: hab Mist geschrieben, kompilieren geht ja :stupid:

edit2: konnte deinen Fehler gerade reproduzieren und probier jetzt mal ne Lösung zu finden :stupid: Ich hab auch schon ne Vermutung, die Seite ist nämlich durch SSL geschützt :gruebel:

smartmod 11. Jul 2005 20:10

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
Sowas schwebte mir auch vor - aber dann versteh ich nicht, wieso ein Browser das ohne weiteres machen kann... Aber ich überlass das mal grad dem Profi :)

Chris1986 11. Jul 2005 20:35

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
So, bei mir funktionierts jetzt. Die Antwort stand sogar schon in der DP :zwinker:
Zitat:

1) Zunächst benötigt man Delphi 5.0 oder höher und
die Indy Komponenten der Version 9.x.
Außerdem die aktuellen OpenSSL Biblioteken für Indy,
erhältlich sind diese hier.
(DLLs ins Projekt-Verzeichnis kopieren)

2. Nachdem die beiden OpenSSL dll's in das Projekt-
verzeichnis kopiert wurden benötigt man ein SSL Zertifikat.
Im Internet Explorer im Menü Extras > Internet Optionen >
Inhalte wählt man dazu den Button Zertifikate und dort
Vertrauenswürdige Stammzertifierungsstellen. Hier
sucht man sich nun ein Class 3 Zertifikat (root authority) aus
und exportiert dieses Base-64-codiert in das Projektverzeichnis.

3. In Delphi erstellt man eine neue Anwendung und plaziert
dort aus dem Reiter Indy I/O Handlers die Komponente IdSSLIOHandlerSocket.
In den SSL-Optionen für diese Komponente wird unter CertFile das
zuvor exportierte Zertifikat ausgewählt. Zusätzlich werden
die Optionen VerifyDepth auf 2, Method auf sslvSSLv23 und
Mode auf sslmClient gesetzt.
Als nächstes plaziert man eine TIdHttp Komponente aus dem
Reiter Indy Clients auf der Form und ergänzt folgende Optionen:
Request.ContentType mit application/x-www-form-urlencoded
und IOHandler mit TIdServerIOHandlerSSL.
Zusätzlich musst du in der HTTP-Kompo "HandleRedirect" auf "true" stellen.

Die Prozedur in deinem Button bleibt unverändert. Jetzt sollte eigentlich alles funktionieren. Das Exportieren des Zertifikats kannst du dir übrigens sparen, bei mir funktionierts auch so.

Bei Bedarf häng ich meine Demo noch an.

Gruß
Christian

smartmod 11. Jul 2005 21:17

Re: Hilfe mit IdHTTP - IOHandler value is not valid...
 
:corky: FUNKTIONIERT!

Dankeeeee!

Hmmm... Soll/darf ich Dich direkt weiternerven?

Ich schreib einfach mal...

Was ich im Endeffekt machen will, ist ein Programm, mit dem ich auf UPS Internet Shipping zugreifen kann, ohne mich einzuloggen und jedesmal die Adressdaten einzugeben.
Mein Ansatz war jetzt, die Klicks und Übergaben, die im Internetshipping stattfinden, alle über Delphi zu simulieren.

Das nächste Problem ist jetzt, dass mir die UPS Seite beim ersten Loginversuch ne Fehlermeldung gibt (wegen Cookies) und wenn ich dann den Button einfach nochmal drücke, bin ich eingeloggt.

Beim nächsten simulierten Klick, sagt er mir dann, dass mein Browser nicht unterstützt wird (versuche das aus dem Quellcode rauszulesen). So nu komm ich wieder nicht weiter.

Ziel des ganzen ist eine HTML Datei, die am Ende vom Shipping Vorgang immer angezeigt wird, automatisch zu öffnen und zu drucken. Diese enthält nämlich den Shipping Aufkleber.

Für einen Noob wie mich bedeutet das natürlich mehrere Jahre Arbeit ;)

Viiiiiiieeeeeeeeeeeeeelen Dank schonmal!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.
Seite 1 von 2  1 2      

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