Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2 (https://www.delphipraxis.net/173593-header-auslesen-aendern-twebbrowser-onbeforenavigate2.html)

Caps 6. Mär 2013 12:02

Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Guten Tag,

ich würde gern den HTTP-Header verändern oder wenigstens auslesen, wenn ich eine Seite im WebBrowser annavigiere.

Ich benutze das total übersichtliche Ereignis OnBeforeNavigate2:
Delphi-Quellcode:
procedure TFormDATBrowser20.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
// Variante 1
// Headers := OleVariant(String(Headers) + 'Connection: Close'+#13#10);
// ging nicht, d.h. im Sniffer hab ich gesehen, dass da 'Connection: keep-alive' stand

// Variante 2
// Headers := OleVariant('Foo: bar'+#13#10);
// ging nicht, d.h. im Sniffer war diese Variable nicht im Header
end;
Anhand der Kommentare ist das Problem erkenntlich: ich scheine den ausgehenden Header nicht ändern zu können (Sniffer = Netzwerkanalysetool).
Wenn ich den Header auslese und mit einem ShowMessage anzeige, so ist er oft komplett leer (was nicht sein kann), und manchmal steht das Encoding des Formulars drin.

Meine Frage: wie bekomme ich möglichst volle Kontrolle über den HTTP-Header beim TWebBrowser (exakt diese Browser-Komponente)?
Anmerkung: in der Hilfe steht zu Headers: "[..] In der Routine kann dieser Wert vor dem Senden an die Ziel-URL geändert werden."

Besten Dank und viele Grüße
Caps

Bernhard Geyer 6. Mär 2013 12:37

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Ich würde sagen: Gar nicht. Dazu ist TWebBrowser mit seiner API gar nicht gedacht.

Caps 6. Mär 2013 12:42

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1206116)
Ich würde sagen: Gar nicht. Dazu ist TWebBrowser mit seiner API gar nicht gedacht.

Aber wie darf ich dann die Delphi-Hilfe verstehen?

Bernhard Geyer 6. Mär 2013 12:47

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Zitat:

Zitat von Caps (Beitrag 1206119)
Aber wie darf ich dann die Delphi-Hilfe verstehen?

Einfach nicht falsch.... :-)

Auf was genau beziehst du dich?

Caps 6. Mär 2013 12:56

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Danke, ich versuche es ja nicht falsch zu verstehen ;-).

Ich beziehe mich auf die Stelle:

'Headers' enthält die Kopfzeilen, die an den Server gesendet werden, wenn die URL einer HTTP-Botschaft entspricht. Diese Informationen geben beispielsweise die vom Server angeforderte Aktion oder die Art der Daten an (viele der Eigenschaften des TWebRequest-Objekts entsprechen solchen Kopfzeilen). In der Routine kann dieser Wert vor dem Senden an die Ziel-URL geändert werden.

Ich bin nach Lesen dieser Stelle zu der Ansicht gelangt, den Header manipulieren zu können. Was kann ich falsch verstanden haben?

lg Caps

ps Ich habe dann einen String-Cast probiert, weil ich irgendwo (im Forum) gelesen habe, dass es ein per CRLF getrennter String sein muss.

Caps 6. Mär 2013 14:05

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
In Grund und Boden argumentiert? ;-)

Caps 6. Mär 2013 15:55

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Hat vielleicht schon jemand probiert, zusätzliche oder andere Header-Variablen mit dem TWebBrowser zu verschicken (erfolgreich)?

Caps 18. Mär 2013 09:04

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Final push. :?::cat:

mjustin 18. Mär 2013 12:04

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Eine (vermutliche) Lösung ist hier zu finden:

http://stackoverflow.com/questions/9...wser-in-delphi

Delphi-Quellcode:
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  NewHeaders: OleVariant;
begin
  // do not allow frames or iframes to raise this event
  if (pDisp as IUnknown) = (WebBrowser1.ControlInterface as IUnknown) then
  begin
    // avoid stack overflow: check if our custom header is already set
    if Pos('MyHeader', Headers) <> 0 then Exit;

    // cancel the current navigation
    Cancel := True;
    (pDisp as IWebBrowser2).Stop;

    // modify headers with our custom header
    NewHeaders := Headers + 'MyHeader: Value'#13#10;

    (pDisp as IWebBrowser2).Navigate2(URL, Flags, TargetFrameName, PostData, NewHeaders);
  end;
end;

Caps 4. Apr 2013 12:35

AW: Header auslesen/ ändern in TWebBrowser.OnBeforeNavigate2
 
Wow, sorry, die Antwort ist mir irgendwie entgangen. Danke, ich schau mal...


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