Header Authorization für ReEST Schnittstelle

Spelmann

Erfahrenes Mitglied
#1
Ich muss für eine Anwendung eine Authentifizierung in einem Header senden, weiß aber nicht, was damit gemeint ist. Innerhalb von <head></head> kann ich doch nur meta Angaben deklarieren.

Kann mir jemand sagen, wie ich eine HTTP basic authentication übermitteln kann?
Dieses Element muss irgendwo hin, aber ich weiß nicht wo: Authorization: Basic xyz
 
#2
Hi

wie der Name schon sagt geht es nicht um HTML, sondern HTTP,
also das Verfahren wie Dateien (zB. HTML-Dateien mit Head und Body und allem einfach
komplett, und/oder CSS, JS, Bilder...) vom Server zum Browser übertragen werden,
wie Formulareinagben zurückgeschickt werden usw.

Letztendlich sind kleine Textnachrichten in einem bestimmten Format, die zwischen Server
und Browser ausgetaucht werden. Browser meldet sich, teilt mit was es für ein Programm ist,
fragt nach einem bestimmten Dateinamen; Server sendet zurück "das ist ein PNG-Bild,
hat 1234 Byte, und der Dateiinhalt folgt..." Stark vereinfacht. Und alles außer dem tatsächlichen
Inhalt der (PNG/etc.)-Datei sind in dem Zusammenhang "Header". Also die ganzen Zusatzinfos,
die da kommuniziert werden.
Bei den ca. Hunderttausend verschiedenen möglichen Infos, die da gesendet werden können,
sind eben auch welche zur Anforderung bzw. Senden von Passwörtern dabei, falls der Server
bestimmte Dateien so schützen will (nicht wirklich sicher, aber naja)

Wie man das wo angibt hängt davon ab, womit und wie man sein Programm schreibt(?)
 

Spelmann

Erfahrenes Mitglied
#3
Danke für die ausführliche Antwort.
Aber es bleiben doch noch Fragen offen, bzw. neue kommen dazu.

Ich will via PHP auf ein XML zugreifen und soll mich dafür authentifizieren.
siehe: https://services.mobile.de/manual/search-api.html unter Authentication

Nach der Lektüre deiner Ausführungen und meinem Verständnis, müsste ich doch dann lediglich ganz oben im Dokument schreiben:
PHP:
<?php
print header('Authorization: foobar');
?>
Funktioniert aber nicht.
Auszug der Fehlermeldung: ...failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized...

Hab ich noch was falsch verstanden?
 
#4
Abgesehen davon, dass dein Header nicht richtig ausschaut
(und header() nicht mit print zusammengehört), ist das die falsche Stelle im System:
So (nur mit richtigen Angaben) würdest du deine PHP-Seite gegen unberechtige Aufrufe schützen.
Du willst ja eine andere geschützte Seite per PHP verwenden.

Mit welchem Code du die andere Seite verwendest wäre hilfreich, dann kann man da genauere Angaben machen.
 

Spelmann

Erfahrenes Mitglied
#5
Ich will auf eine XML zugreifen für die ich einen Link (ReST Schnittstelle) habe:
Code:
$daten = file_get_contents('https://services.mobile.de/search-api/search?customerNumber=******');
Diese Zeile erzeugt auch die o.g. Fehlermeldung.
In der Anleitung von mobile.de steht:
You must authenticate yourself with a username and password using the HTTP basic authentication scheme
Ich soll genau genommen mindestens zwei Dinge im Header senden:
  • Accept - application/xml (You must send this header)
  • Authorization - Username and password are joined together using a colon and then being encoded using Base64. (You must send this header)
Ich müsste jetzt wissen, wie und an welcher Stelle ich Header senden kann.
Ich steh leider völlig auf dem Schlauch und sehe wahrscheinlich den Wald vor lauter Bäumen nicht.
 
Zuletzt bearbeitet:
#6

Spelmann

Erfahrenes Mitglied
#7
Also mit file_get_contents kommt man da eher nicht weiter.
Heißt das, wenn ich die Autorisation mit Curl realisiere kann ich im weiteren Code file_get_contents() nicht benutzen, und muss anders vorgehen um die Daten auszulesen?
Zum Verständnis: ich hab schon einiges mit PHP gemacht, aber zum ersten mal mit XML sowie diesem Header Problem zu tun. Ich bin auf die Tutorials und Anleitungen angewiesen, die es im Netz gibt. Die meisten davon beziehen sich auf simpleXML und DOM. Bei einem von beidem möchte ich gerne bleiben. Beide Methoden benutzen, so wie ich das jetzt als XML Neuling sehe, file_get_contents().

Ist es wirklich so kompliziert, diese Header Autorisation zu senden? Ich hatte gedacht, mir fehlt nur ein kleiner Codeschnipsel der mir in Folge der Autorisation das hier erlaubt:
Code:
$daten = file_get_contents('https://services.mobile.de/search-api/search?customerNumber=123456');
$xml = simplexml_load_string($daten);
usw.
Ich wäre für ein simples Beispiel, soweit möglich, dankbar.
 
#8
Die XML-Verarbeitungs-Art kann ja komplett gleich bleiben,
es geht nur um einen Ersatz für das file_get_contents
zB.
PHP:
$cu = curl_init("https://services.mobile.de/search-api/search?customerNumber=******");
curl_setopt($cu, CURLOPT_HEADER, 0);
curl_setopt($cu, CURLOPT_HTTPHEADER, array(
    'Accept: application/xml',
    'Authorization: ' . base64_encode("deinusername,deinpasswort")
    ));
$cudata = curl_exec($ch);
curl_close($cu);
wobei da eben die Logindaten noch einzusetzen sind und die Fehlerprüfung noch fehlt.

edit: In $cudata sollte dann eben der geladene Inhalt sein.
 
Zuletzt bearbeitet:

Spelmann

Erfahrenes Mitglied
#10
Hi sheel,
endlich hatte ich wieder Zeit mich an das Projekt zu setzen. Leider ohne Erfolg:

PHP:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>MOBILE.de Test</title>
    </head>
    <body>
        <h2>Auflistung</h2>
        <?php
        $cu = curl_init("https://services.mobile.de/search-api/search?customerNumber=******");
        curl_setopt($cu, CURLOPT_HEADER, 0);
        curl_setopt($cu, CURLOPT_HTTPHEADER, array(
            'Accept: application/xml',
            'Authorization: ' . base64_encode("nutzernamepasswort") //Soll laut mobile.de als Kolonne geschrieben werden
            ));
        $cudata = curl_exec($cu);
        curl_close($cu);
      
        $xml = simplexml_load_string($cudata);
        var_dump($xml);
        ?>
    </body>
</html>
mein var_dump gibt aber ausser bool(false) nichts aus.
Habe ich was falsch gemacht?
 
Zuletzt bearbeitet:

sheel

I love Asm
#11
Hi

setz mal
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
am Anfang des PHP-Teils. Kommen dann irgendwelche weiteren Meldungen?
Vielleicht auch nur im ausgegebenen Quelltext sichtbar, je nach Browser zB. mit Strg-U anzeigbar?
 

Spelmann

Erfahrenes Mitglied
#13
Oh, nein ist es nicht! Teste ich das Script auf dem Server bekomme ich die Rückmeldung:
401 Unauthorized. Die Zugangsdaten die ich verwende müssten aber stimmen.
 

sheel

I love Asm
#14
Also, eigentlich sollte das lokal auch gleich funktionieren. Naja, Hauptsache es geht vorerst am Server.

Ein Problem hab ich grad gefunden:
Username and password are joined together using a colon and then being encoded using Base64.
Also nutzername,passwort statt nutzernamepasswort im Base64 drin.
(wo du in der englischen Anleitung das Wort "Kolonne" siehst ist mir nicht klar :))
 

Spelmann

Erfahrenes Mitglied
#15
Auweia, wie peinlich. Colon = Doppelpunkt. Also kein kein Komma zwischen Nutzername und Passwort sondern eben jenen Doppelpunkt.
Und siehe da, es funktioniert. Jedenfalls online. Auf meinem XAMPP wirkt das allerdings nicht. Kannst Du mir das gerade noch erklären?

Ansonsten danke ich Dir schon mal sehr für deine Hilfe!!!
 
Zuletzt bearbeitet: