AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Maschinesteuern mit TNetHttpClient

Maschinesteuern mit TNetHttpClient

Ein Thema von WunniKunz · begonnen am 28. Feb 2024 · letzter Beitrag vom 15. Apr 2024
Antwort Antwort
Seite 2 von 2     12
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Maschinesteuern mit TNetHttpClient

  Alt 10. Apr 2024, 10:44
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
Klaus
  Mit Zitat antworten Zitat
WunniKunz

Registriert seit: 13. Feb 2024
8 Beiträge
 
#12

AW: Maschinesteuern mit TNetHttpClient

  Alt 11. Apr 2024, 13:35
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 URLort, Stromanforderung ohne "=1". Dies entspricht etwa, wie wenn mit dem Browser URLort 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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.613 Beiträge
 
#13

AW: Maschinesteuern mit TNetHttpClient

  Alt 11. Apr 2024, 13:42
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.856 Beiträge
 
Delphi 12 Athens
 
#14

AW: Maschinesteuern mit TNetHttpClient

  Alt 12. Apr 2024, 23:24
Hallo,

naja, es kann wirklich nicht schaden das mal mit Wireshark mitzuschneiden.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
WunniKunz

Registriert seit: 13. Feb 2024
8 Beiträge
 
#15

AW: Maschinesteuern mit TNetHttpClient

  Alt 13. Apr 2024, 14:59
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
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
672 Beiträge
 
#16

AW: Maschinesteuern mit TNetHttpClient

  Alt 13. Apr 2024, 15:33
https://swagger.io/docs/specificatio...U1dzByZA%3D%3D

Falls dein user / Passwort geheim bleiben soll, solltest du das base64 oben oder dein Passwort ändern.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#17

AW: Maschinesteuern mit TNetHttpClient

  Alt 13. Apr 2024, 23:03
Hat jemand da Erfahrung und eventuell einen Beispielcode?
Du kannst Curl nehmen. Wie ist in diesem Post beschrieben.
Delphi-Quellcode:
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;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
WunniKunz

Registriert seit: 13. Feb 2024
8 Beiträge
 
#18

AW: Maschinesteuern mit TNetHttpClient

  Alt 14. Apr 2024, 20:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
672 Beiträge
 
#19

AW: Maschinesteuern mit TNetHttpClient

  Alt 15. Apr 2024, 06:37
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?
Meinst du das "Authorization: Basic"? Das ist doch einfach "GLT:262175" in Base64 codiert!?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
630 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Maschinesteuern mit TNetHttpClient

  Alt 15. Apr 2024, 13:33
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
Nein das ist ein HTTP-Header, also kein Cookie. Du musst einfach den Header mit dem richtigen Base64 codierten User : Password mitsenden:

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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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