Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mozilla ActiveX Control Post (https://www.delphipraxis.net/44967-mozilla-activex-control-post.html)

qicki 27. Apr 2005 17:15


Mozilla ActiveX Control Post
 
hallo

Ich hab ein problem mit dem Mozilla ActiveX Control, zu finden auf www.iol.ie/~locka/mozilla/control.htm.

also die Parameter des Navigate
Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var Headers: OleVariant);

ist 100% so definiert wie von dem Twebbrowser.

nur kann ich postdata und headers übergeben , wie beim Twebbrowser , es ist so als macht er damit nichts.

Delphi-Quellcode:
 var
   EncodedStr: string;
   Header: OleVariant;
   Post: OleVariant;
   i: integer;
begin
  try
    EncodedStr := '&user='+ USER +'&pass='+ PASS;
    Post := VarArrayCreate([0, Length(EncodedStr) - 1], varByte);
    for i := 1 to Length(EncodedStr) do
      Post[I - 1] := Ord(EncodedStr[I]);
    Header := 'Content-Type: application/x-www-form-urlencoded' + #10#13;
     
    InetBrowser.Navigate(URL + '/?login', EmptyParam,EmptyParam, Post, Header); //eingelogt
    MozillaBrowser.Navigate(URL + '/?login', EmptyParam,EmptyParam, Post, Header); //nicht einlogen
end;


hat jemand ne idee woran es liegen könnte ?

shmia 27. Apr 2005 17:27

Re: Mozilla ActiveX Control Post
 
Warum baust du den Parameter PostData so umständlich zusammen ?
So erscheint mir das besser:
Delphi-Quellcode:
var
   EncodedStr: string;
   Header: OleVariant;
   PostData: OleVariant;
   i: integer;
begin
  try
    EncodedStr := '&user='+ USER +'&pass='+ PASS;
    PostData := EncodedStr; // wird intern als WideString bzw. BSTR gespeichert

qicki 27. Apr 2005 19:59

Re: Mozilla ActiveX Control Post
 
ich sag nur Ord(EncodedStr[I]);

denn das ganze muss in ascii umgewandelt werden so weit ich weis

shmia 28. Apr 2005 08:17

Re: Mozilla ActiveX Control Post
 
Zitat:

Zitat von qicki
ich sag nur Ord(EncodedStr[I]);
denn das ganze muss in ascii umgewandelt werden so weit ich weis

Ord(EncodedStr[I]) wandelt aber nicht in ASCII.
Sowieso wird in der Windows-Welt der ANSI Zeichensatz benützt.
Bei Automatisierungsschnittstellen von ActiveX werden Strings grundsätzlich als WideString (= BSTR
= Basic STring) übertragen.
Ich vermute ganz stark, dass Navigate im Parameter PostData kein Variant-Array of varByte verträgt.
Beim Parameter Header verwendest du ja auch einen Widestring/BSTR.

qicki 28. Apr 2005 15:13

Re: Mozilla ActiveX Control Post
 
naja nur wenn ich
Delphi-Quellcode:
EncodedStr := '&user='+ USER +'&pass='+ PASS;
PostData := EncodedStr;
dann passiert garnicht , weder twebbrowser noch tmozillabrowser logen sich ein

und das was ich gepostet habe habe ich auf 3 oder 4 Seiten gefunden und dachte das dies 100% richtig ist

shmia 28. Apr 2005 15:53

Re: Mozilla ActiveX Control Post
 
Zitat:

Zitat von qicki
naja nur wenn ich
Delphi-Quellcode:
EncodedStr := '&user='+ USER +'&pass='+ PASS;
PostData := EncodedStr;
dann passiert garnicht , weder twebbrowser noch tmozillabrowser logen sich ein

Aah, du hast ja recht, der Parameter PostData verhält sich etwas seltsam:
http://support.microsoft.com/default.aspx?kbid=174923

Damit die Sache übersichtlicher wird, hier ne Funktion dazu.
Hier wird übrigens ein abschliesendes #0 Zeichen geschrieben; da die Web-Browser üblicherweise in C/C++ programmiert sind):
Delphi-Quellcode:
function VarByteArrayCreate(const s:string):Variant;
var
   i : Integer;
begin
  Result := VarArrayCreate([0, Length(s)], varByte);

  // copy the ordinal value of the character into the VarByte array
  for i := 1 to Length(s) do
    Result[i-1] := Ord(s[i]);

  // Final terminating Character.
  Result[Length(s)] := 0;
end;
User und Password sollte encoded werden, wie hier beschrieben:
http://www.scalabium.com/faq/dct0139.htm

qicki 28. Apr 2005 16:14

Re: Mozilla ActiveX Control Post
 
so hab ich mal geändert , leider hatte das ganze keinen erfolg gezeigt
Delphi-Quellcode:
   
EncodedStr := 'user='+ HTTPEncode(USER)+'&pass='+ HTTPEncode(PASS);
Post := VarByteArrayCreate(EncodedStr);
Header := 'Content-Type: application/x-www-form-urlencoded' + #10#13;

hab jetzt mal mit einem Paketsniffer geschaut was rausgeht

beim Twebbrower wird alles vom EncodedStr sauber gesendet
beim Tmozillabrowser geht nichts raus

ich denk mal das ist nicht implementiert in der version , schade
somit ist es leider kein 100% ersatz


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