Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Post Data mit neuem TEdgeBrowser (https://www.delphipraxis.net/205275-post-data-mit-neuem-tedgebrowser.html)

AuronTLG 20. Aug 2020 13:40

Post Data mit neuem TEdgeBrowser
 
Moin,

nun, da die Standardversion von Microsoft Edge endlich so weit ist, dass man nicht mehr irgendwelche Dev Builds runterladen muss, wollte ich mal schauen, ob ich CEF4Delphi eventuell durch den TEdgeBrowser ersetzen kann.
Ist zum Großteil kein Problem bis auf das Senden und Empfangen von Post Data.
Bei mir geht es z.B. darum, Login-Daten an Webshops zu übermitteln und etwaige Antworten wieder zu verarbeiten.

Sowohl damals bei der alten Browserkomponente sowie bei CEF4Delphi ist das relativ simpel gewesen: Bei CEF4Delphi z.B. hat man sich den Request gepackt, dessen method auf "POST" gestellt, Flags entsprechenden gesetzt, Header angepasst und dann mit dem PostData versehen.
Bei dem neuen WebView2-basierten EdgeBrowser habe ich jedoch momentan überhaupt keine Ahnung wie das gehen soll und finde auch nirgendwo was dazu. Heilig, ich finde noch nicht mal in der WebView2-API irgendwas brauchbares...

Hat irgendwer schon mit dem neuen Browser herumexperimentiert und weiß wie man das bewerkstelligt?

Der schöne Günther 20. Aug 2020 14:03

AW: Post Data mit neuem TEdgeBrowser
 
Was man nicht vergessen sollte:
Zitat:

The WebView2 Preview is intended for early prototyping and to gather feedback to help shape the API. You should not use the preview in your production apps because there may be breaking changes.
Quelle: https://docs.microsoft.com/en-us/mic...edge/webview2/

Die Doku findest du hier:
https://docs.microsoft.com/en-us/mic...-api-reference


Eine Antwort auf deine Frage habe ich dort aber auch nicht gefunden 🤔


Ich hätte auf das NavigationStarted-Event getippt, aber da heißt es explizit
Zitat:

you cannot modify the HTTP request headers in a NavigationStarting event.

Rollo62 20. Aug 2020 19:48

AW: Post Data mit neuem TEdgeBrowser
 
Wenn der neue Edge ein Chromium ist,
Kommt man da irgendwie ans Chromium ran ?

Hat das Mal jemand probiert ?

Könnte ja sein das es mit Cef4D irgendwelche Schnittpunkte hat.

AuronTLG 21. Aug 2020 13:06

AW: Post Data mit neuem TEdgeBrowser
 
Letzendlich wird der Edgebrowser über Zugriffe auf die Webview2-API gesteuert, dementsprechend hast du also immer Microsoft zwischen dir und Chromium hängen.

Ich befürchte, dass Günther's Vermutung zutrifft und das Ganze einfach noch nicht so ausgereift ist.

Wobei ich das schon etwas seltsam finde, da CEF4Delphi die Funktion ja bietet.

AuronTLG 21. Aug 2020 14:34

AW: Post Data mit neuem TEdgeBrowser
 
So, Nachtrag. Ich habs mit der Winsoft-Komponente "Webview", welche genau wie der TEdgeBrowser auf Webview2 basiert, hinbekommen.

Durchaus möglich, dass es mit dem Edgebrowser ähnlich geht, aber da hab ich jetzt keine Muse zu, dies auszuprobieren.

Wenns irgendwer braucht, kann ich gerne später mal meinen Ansatz hier hinstellen.

ReinerS 17. Sep 2020 08:50

AW: Post Data mit neuem TEdgeBrowser
 
Hallo AuronTLg,

kannst du bitte die Lösung mit Winsoft posten, da Ich vor dem gleichen Problem stehe.

Gruß Reiner

AuronTLG 17. Sep 2020 10:17

AW: Post Data mit neuem TEdgeBrowser
 
Zuerst stell sicher, dass du die neuste Version der Webview hast.

Dann ist das Ereignis "OnWebResourceRequested" der Webview entscheidend.

Für POSTDATA ist der Code bei mir:

Code:
If Request.Uri = Url
  Then Begin
       Request.Method := 'POST';
       Request.Header['Content-Type'] := 'application/x-www-form-urlencoded';
       Request.Content := TEncoding.UTF8.GetBytes(StrParameter);
       End
"StrParameter" ist hierbei der zu übergebende Inhalt. Bei mir z.B. bestimmte Login-Daten.
"Url" ist bei mir die entsprechende Basis-URL des Webshops.
Empfangen geht im selben Ereigniss umgekehrt über "If Request.Uri = 'http://127.0.0.1/'", wobei man den Inhalt hier dann genau umgekehrt aus Request.Content entnehmen kann.

Es ist ein bisschen her, weswegen ich nicht mehr genau weiß, wie entscheidend das war, aber ich habe noch folgendes im "OnActive"-Ereignis der Webview stehen:

Code:
WebView.AddFilter(Url);
WebView.AddFilter(HOOKURL);
HOOKURL ist meine Konstante für 'http://127.0.0.1/'; Wie gesagt, ich weiß gerade nicht, ob das wichtig war.

ReinerS 17. Sep 2020 13:07

AW: Post Data mit neuem TEdgeBrowser
 
Danke, werd Ich ausprobieren

ReinerS 29. Sep 2020 14:28

AW: Post Data mit neuem TEdgeBrowser
 
Werden bei dir die Postdata richtig verschickt?

wenn Ich den Datenverkehr mit Fiddler überwache werden keine Postdata verschickt.

anbei ein kleines Demoprogramm
postdata werden aus einer Datei geladen
sUrlFilter wird zum Filtern in on WebResourceRequested verwendet, damit Postdata nur einmal geladen werden.
WebResourceRequested wird aber auch nur einmal aufgerufen.

procedure TForm1.Button1Click(Sender: TObject);
begin
sUrlFilter:='https://connect.zander.online/api/v1.0/shop/gateway/ids/execute';
WebView1.Visible:=true;
WebView1.Uri:='https://connect.zander.online/api/v1.0/shop/gateway/ids/execute'
end;

procedure TForm1.WebView1Active(Sender: TObject);
begin
WebView1.AddFilter('https://connect.zander.online/*');
end;

procedure TForm1.WebView1WebMessageReceived(Sender: TObject; const Source,
Message, Json: string);
begin
MessageDlg(Message,mtInformation,[mbOK],0);
end;

procedure TForm1.WebView1WebResourceRequested(Sender: TObject;
const Request: TWebResourceRequest; var Response: TWebResourceResponse);
var
s,sBoundary:String;
fs:TFileStream;
begin
s:=ReQuest.Uri;
if (sUrlFilter<>'') and (Pos(sUrlFilter,s)=1)
then begin

fs:=TFileStream.Create('e:\Programmierung\webview\ spostdata.txt',fmOpenReadWrite);
fs.Position:=0;
setLength(sPostData,fs.Size);
fs.Read(sPostData[1],fs.Size);
freeAndNil(fs);

Request.Header['Content-type'] := 'application/x-www-form-urlencoded';
Request.Method:='Post';
Request.Content:=TEncoding.UTF8.GetBytes(sPostData );
sUrlFilter:='';
end;
end;

AuronTLG 29. Sep 2020 14:42

AW: Post Data mit neuem TEdgeBrowser
 
Bei mir funktioniert das wunderbar.

Eventuell ein Problem mit dem Typ?
Die Post-Data, die ich übergebe, sind einfach ein String mit Anmeldeinformationen für einen Webshop, der dann im Prinzip Teil der URL ist.
Dementsprechend Content-Typ "application/x-www-form-urlencoded". Vielleicht benötigen deine Daten einen anderen Typ, abhängig davon was genau du übergibst.


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