Digest Authentication

Hi,
Kennt jemand ein einfaches Beispiel für eine digest authentication via php und curl. Die Beispiele die ich so finde erschließen sich mir leider nicht wirklich.

Eigentlich nicht anders als sonst.

Michael

Danke - wird probiert!

Hi Michael,

ich habe jetzt mal das folgende probiert

<?php

$username = 'xyz';
$password = 'xyz';

//$URL = 'http://'.$username.':'.$password.'@192.168.1.28/evse/state';
$URL = 'http://192.168.1.28/evse/state';
if ($URL == false) {
    return false;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC | CURLAUTH_DIGEST);

$Result = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$Error = curl_error($ch);
curl_close($ch);
var_dump($ch);

Ich bekomme ein resource(2) of type (Unknown)

In deinem Code Beispiel konnte ich auf keinen Punkt sehen, bei dem ein Passwort übergeben wird?

ok … einen Fehler gefunden … var_dump($Result); wäre richtig gewesen.

Leider bekomme ich bei obigem bool(false) … well ich den anderen Charger ohne Anmeldung wähle, dann kommt da der korrekte JSON String. Also irgendwas macht ich bei dem Digest falsch - der sieht bei den meisten Beispielen auch viel aufwändiger aus. Ist Dein Beispiel kürzer, weil es auf einer aktuelleren PHP Version basiert?

Du musst auch nicht die CURL Ressource ausgeben, sondern Result und http_code.

Ja, ist etwas gemein, bei dem Code.
Die Zugangsdaten liegen schon zusammen mit der URI dem Protokoll und Host als komplette URL vor und kommen aus dem Buffer.
Edit: da sich die Antworten überschnitten haben.
Habe da, auch bei anderen Modulen oder Scripten, nie was anders gemacht. Bestimmt schon seit IPS auf 4.3 oder so war. Müsste alles php 7 sein.
Michael

Du kannst ja Mal den Header der Antwort ausgeben, dann sieht man vielleicht was die Gegenseite bemängelt:

$hdrs = curl_getinfo($ch, CURLINFO_HEADER_OUT);
printf("%s\n", $hdrs);

Hast du im User oder Passwort Sonderzeichen?
Meine das ich dort auch schon Stress hatte.
Darum habe ich dann schon die getrennten Optionen CURLOPT_USERNAME und CURLOPT_PASSWORD benutzt.
Michael

die getrennten Optionen waren es … damit ging es direkt!

Hier der funktionierende Code, wenn mal jemand was sucht. Danke @Nall-chan

<?php

$username = 'admin';
$password = 'admin';

$URL = 'http://192.168.1.27/evse/state';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 5000);
curl_setopt($ch, CURLOPT_USERNAME, $username);
curl_setopt($ch, CURLOPT_PASSWORD, $password);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC | CURLAUTH_DIGEST);
$Result = curl_exec($ch);
var_dump($Result);
$http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$Error = curl_error($ch);
curl_close($ch);

Kurze Ergänzung, damit es nicht einer mit kopiert:

Wird bei http nicht benötigt und bei https bitte nicht deaktivieren, außer man weiß was man macht.
Michael

1 „Gefällt mir“

habe es entfernt … guter Punkt.