AW: Maschinesteuern mit TNetHttpClient
Zitat: Erforderlich beim Zugriff ist eine Authentifizierung, bestehend aus Benutzername und Passwort.
Wie schickst Du denn die userdaten mit, bzw. wie authentifizierst Du Dich? Grüße Klaus |
AW: Maschinesteuern mit TNetHttpClient
Hallo Klaus,
Die Authentifizierung läuft über den OnAuthEvent von TNetHTTPClient mit AUserName und APasswort. Der Event wird ausgelöst durch Get-Anforderungen und Post-Anforderungen bestehend aus URL:Port, Stromanforderung ohne "=1". Dies entspricht etwa, wie wenn mit dem Browser URL:Port gesendet wird. Da wird dann auch die Authentifizierung angefordert. Probiert habe ich deshalb zuerst die Authentifizierung anzufordern und dann die volle Post-Anforderung zu senden. Hat aber auch nicht geklappt. Probieren will ich noch, zwischen Authentifizierung und Post einen Delay einzubauen, kann ich aber erst später machen. Gruß WunniKunz |
AW: Maschinesteuern mit TNetHttpClient
Probiere die Requests erstmal mit einem API-Test Tool wie z.B. Postman aus, und gucke Dir genau an, was als Antwort zurückkommt.
Vermutlich setzt die Authentifizierung einen Cookie, denn Du dann bei jedem weiteren Request wieder mitschicken musst. Davon mal abgesehen frage ich mich eh immer, was eine Anmeldung bei einem Ding soll, das nur HTTP spricht und nicht HTTPS... Ohne Verschlüsselung kann jeder eine Anmeldung abfangen und ist dann sofort drin. :roll: |
AW: Maschinesteuern mit TNetHttpClient
Hallo,
naja, es kann wirklich nicht schaden das mal mit Wireshark mitzuschneiden. Grüße TurboMagic |
AW: Maschinesteuern mit TNetHttpClient
Ich hab mal den Datenverkehr zwischen Client und Server aufgezeichnet. Bei der Authentifizierung mittels Browser wird die Zeile generiert:
"Authorization: Basic R0xUOjI2MjE3NQ==", die dann bei jedem Get oder Post-Aufruf mitgesendet wird. Ist dies der Cookie? Wie extrahiert man den in Delphi und sendet ihn jeweils mit? Hat jemand da Erfahrung und eventuell einen Beispielcode? Grüße |
AW: Maschinesteuern mit TNetHttpClient
https://swagger.io/docs/specificatio...U1dzByZA%3D%3D
Falls dein user / Passwort geheim bleiben soll, solltest du das base64 oben oder dein Passwort ändern. |
AW: Maschinesteuern mit TNetHttpClient
Zitat:
Delphi-Quellcode:
Bis bald...
uses
mormot.core.base, mormot.core.data, mormot.core.text, mormot.core.unicode, mormot.lib.curl; const REQUEST_URL: RawUtf8 = 'http://192.168.178.25:8080/setKeys'; var hnd: TCurl; res: TCurlResult; statusCode: Integer; requestData: RawUtf8; responseData: RawByteString; begin if not CurlIsAvailable then Exit; //=> hnd := curl.easy_init; if hnd <> Nil then try curl.easy_setopt(hnd, coWriteFunction, @CurlWriteRawByteString); curl.easy_setopt(hnd, coWriteData, @responseData); // Basic authentication curl.easy_setopt(hnd, coUserName, RawUtf8('USERNAME')); curl.easy_setopt(hnd coPassword, RawUtf8('PASSWORD')); // Post request data requestData := 'Stromf_Ew.Anforderung_GLT.bAktiv=1'; curl.easy_setopt(hnd, coPostFields, Pointer(requestData)); curl.easy_setopt(hnd, coPostFieldSize, Length(requestData)); curl.easy_setopt(hnd, coURL, Pointer(REQUEST_URL)); curl.easy_setopt(hnd, coCustomRequest, RawUtf8('POST')); res := curl.easy_perform(hnd); if res = crOk then begin curl.easy_getinfo(hnd, ciResponseCode, statusCode); case statusCode of 200: ShowMessage(Utf8ToString(RawUtf8(responseData))); // Stromf_Ew.Anforderung_GLT.bAktiv ok else ShowMessage('Should not happen.'); end; end else ShowMessage(Format('Error: %d (%s)', [Ord(res), curl.easy_strerror(res)])); finally curl.easy_cleanup(hnd); end; end; Thomas |
AW: Maschinesteuern mit TNetHttpClient
Das Passwort ist sicher wichtig, viel wichtiger ist mir aber im Moment wie ich den Authentifizierungsstring speichere und bei jedem Get bzw. Post mitschicke.
Weiss hier jemand etwas? Auf verschiedenen Wunsch hier noch die Sende und Empfangsdaten mitgeschrieben mit NirSoft-SmartSniff: Bei Post mit vorheriger Authentifizierung sieht man, daß der Authentifizierungsstring erzeugt, bei Post aber nicht mitgesendet wird. Authentifizierung mit Browser: GET /index.html HTTP/1.1 Host: 192.168.178.25:8080 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Encoding: gzip, deflate Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 HTTP/1.1 401 Unauthorized Content-Length: 13 WWW-Authenticate: Basic realm="DachsEthernet" Date: Sun, 14 Apr 2024 18:41:51 GMT ACCESS DENIED GET /index.html HTTP/1.1 Host: 192.168.178.25:8080 Connection: keep-alive Cache-Control: max-age=0 Authorization: Basic R0xUOjI2MjE3NQ== Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Encoding: gzip, deflate Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 HTTP/1.1 200 OK Content-Length: 1145 Content-Type: text/html;charset=iso-8859-1 Date: Sun, 14 Apr 2024 18:42:03 GMT Authentifizierung mit Delphi, Methode Get: GET /getKey?k=Hka_Mw1.usDrehzahl&_rnd=9619 HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=ASCII Accept: text/html Accept-Charset: utf-8 Accept-Encoding: gzip, deflate Accept-Language: de-DE,de User-Agent: Mozilla/5.0 Host: 192.168.178.25:8080 HTTP/1.1 401 Unauthorized Content-Length: 13 WWW-Authenticate: Basic realm="DachsEthernet" Date: Sun, 14 Apr 2024 12:09:33 GMT ACCESS DENIED GET /getKey?k=Hka_Mw1.usDrehzahl&_rnd=9619 HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=ASCII Accept: text/html Accept-Charset: utf-8 Accept-Encoding: gzip, deflate Accept-Language: de-DE,de User-Agent: Mozilla/5.0 Host: 192.168.178.25:8080 Authorization: Basic R0xUOjI2MjE3NQ== HTTP/1.1 200 OK Content-Length: 22 Cache-Control: max-age=4, must-revalidate Content-Type: text/plain Date: Sun, 14 Apr 2024 12:09:33 GMT Hka_Mw1.usDrehzahl=0 Delphi mit Methode Post mit Authentifizierungsanforderung vor Senden von Post : ================================================== Index : 3 Protocol : TCP Local Address : 10.211.55.3 Remote Address : 192.168.178.25 Local Port : 61815 Remote Port : 8080 Local Host : WUNNIBALDKUC143.localdomain Remote Host : dachs.fritz.box Service Name : Packets : 12 {6 ; 6} Data Size : 1.265 Bytes {952 ; 313} Total Size : 2.081 Bytes {1.192 ; 889} Data Speed : 0.1 KB/Sec Capture Time : 12.04.2024 15:15:32:861 Last Packet Time : 12.04.2024 15:15:44:848 Duration : 00:00:11.987 Local MAC Address : Remote MAC Address: Local IP Country : Remote IP Country : ================================================== GET /getKey?k=Hka_Mw1.usDrehzahl&_rnd=9619 HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=ASCII Accept: text/html Accept-Charset: utf-8 Accept-Encoding: gzip, deflate Accept-Language: de-DE,de User-Agent: Mozilla/5.0 Host: 192.168.178.25:8080 HTTP/1.1 401 Unauthorized Content-Length: 13 WWW-Authenticate: Basic realm="DachsEthernet" Date: Fri, 12 Apr 2024 13:15:32 GMT ACCESS DENIED GET /getKey?k=Hka_Mw1.usDrehzahl&_rnd=9619 HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=ASCII Accept: text/html Accept-Charset: utf-8 Accept-Encoding: gzip, deflate Accept-Language: de-DE,de User-Agent: Mozilla/5.0 Host: 192.168.178.25:8080 Authorization: Basic R0xUOjI2MjE3NQ== HTTP/1.1 200 OK Content-Length: 22 Cache-Control: max-age=4, must-revalidate Content-Type: text/plain Date: Fri, 12 Apr 2024 13:15:32 GMT Hka_Mw1.usDrehzahl=0 POST /setKeys HTTP/1.1 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=utf-8 Accept: text/html Accept-Charset: utf-8 Accept-Encoding: gzip, deflate Accept-Language: de-DE,de User-Agent: Mozilla/5.0 Content-Length: 34 Host: 192.168.178.25:8080 Stromf_Ew.Anforderung_GLT.bAktiv=1 |
AW: Maschinesteuern mit TNetHttpClient
Zitat:
|
AW: Maschinesteuern mit TNetHttpClient
Zitat:
Delphi-Quellcode:
var http: THTTPClient; begin ... // Diese Zeile vor dem Post einfügen. http.CustomHeaders['Authorization'] := 'Basic ' + TNetEncoding.Base64.Encode('GLT:262175'); // Danach deinen bisherigen Postbefehl aufrufen http.Post ... ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 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