Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #3534

Re: Webseiten mit Username und Passwort aufrufen

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.php
Subject Re: Webseiten mit Username und Passwort aufrufen
Date 2015-11-13 00:14 +0100
Organization PointedEars Software (PES)
Message-ID <3015891.IA6rv3kU7U@PointedEars.de> (permalink)
References <n21htq$rj$1@news.albasani.net> <2276275.86emZNHdUH@PointedEars.de>

Show all headers | View raw


Thomas 'PointedEars' Lahn wrote:

> Klaus Ketelaer wrote:
>> ich lese die Webseite meines Wetter-Servers einfach über die Urls
>>    http://username:password@home.domainname.de:8081/ipwe.cgi
>> oder
>>    http://username:password@192.168.92.100/ipwe.cgi
>> aus. (Von extern und intern)
>> 
>> Das geht z.B. in Perl problemlos mit $text = get($url).
>> Auch in C++ oder Visual Basic gibt es keinerlei Probleme.
> 
> Dort wird es entsprechende Wrapper geben, die wie cURL funktionieren.
>  
>> […]
>> Egal ob ich es einfach mit file_get_contents($url) versuche oder die
>> komplizierte Variante verwende:
>> 
>> $auth = base64_encode("$user:$pass");
>> $header = array("Authorization: Basic $auth");
>> $options = array('http' => array('method' => 'GET','header' => $header));
>> $context = stream_context_create($options);
>> echo file_get_contents("http://$url", false, $context);
>> 
>> Ich erhalte immer nur "401 Unauthorized", egal ob ich intern oder extern
>> auf das Gerät zugreife.
>> 
>> Was mache ich da falsch?
> 
> Du sendest dem Server bei der ersten Variante Information, die er
> ignoriert. IIRC ist die Authentifizierung über URIs bei HTTP mindestens
> deprecated. Kein HTTP-Client und -Server muss das noch unterstützen.

Das stimmt so.

> Bei der zweiten Variante sendest Du ihm ein Headerfeld (“Authorization”),
> bevor dieser es angefordert hat (mit “WWW-Authenticate: Basic …”), und
> wenn er es dann anfordert, sendest Du es ihm nicht.

Das hingegen ist eher Unfug, denn wenn der Client das Authorization-
Headerfeld gleich mitsendet (etwa aufgrund einer vorherigen 
Authentifizierungsanfrage), funktioniert es bei meinem Webserver (Apache 
2.4.x) auch.  Entsprechend funktioniert bei mir der folgende Quickhack*:

$ php -r '

$context = stream_context_create([
  "http" => [
    "header" => [
      "Authorization: Basic " . base64_encode("foo-user:bar-password")
    ]
  ]
]);

$foo = file_get_contents("http://foo.example/", null, $context);

echo $foo . "\n";'
[…]

$ php -v
PHP 5.6.11-1 (cli) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend 
Technologies
    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

$ php -r 'phpinfo(INFO_CONFIGURATION);' | grep url
allow_url_fopen => On => On
allow_url_include => Off => Off

Die HTTP-Fehlermeldung, die Du erhältst, impliziert, dass Deine PHP-
Einstellungen stimmen, d. h. in den relevanten Werten mit meinen 
übereinstimmen.  Es könnte noch sein, dass serverseitig auf den User-Agent 
getestet wird (entsprechend wäre dann über den http-Key “user_agent” ein 
Browser zu faken, damit es funktioniert) oder dass keine *Basic* 
Authentication verwendet wird.

Im Zweifelsfall würde ich (mit Wireshark oder Fiddler) analysieren, wie sich 
die Requests bei den Ansätzen mit file_get_contents() und curl_*() 
unterscheiden.  Bei mir ist das Folgendes:

                      Angeforderte HTTP-Version  “Accept: */*”-Headerfeld

file_get_contents(…)  1.0                        nicht vorhanden
curl_*(…)             1.1                        vorhanden

Beides funktioniert mit *meinem* Server (der immer HTTP/1.1 anbietet).


___________
* Benutzername, Passwort und URL von der Red. geändert ;-)
-- 
PointedEars
Zend Certified PHP Engineer
Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.

Back to de.comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Webseiten mit Username und Passwort aufrufen Klaus Ketelaer <spam@spambouncer.de> - 2015-11-12 09:17 +0100
  Re: Webseiten mit Username und Passwort aufrufen Klaus Ketelaer <spam@spambouncer.de> - 2015-11-12 10:15 +0100
    Re: Webseiten mit Username und Passwort aufrufen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-11-13 00:16 +0100
  Re: Webseiten mit Username und Passwort aufrufen Gerome Muent <kontakt@bmservices.de> - 2015-11-12 11:19 +0100
    Re: Webseiten mit Username und Passwort aufrufen Klaus Ketelaer <spam@spambouncer.de> - 2015-11-12 12:52 +0100
    Re: Webseiten mit Username und Passwort aufrufen Christian Stadler <stadli@gmx.de> - 2015-11-14 19:25 +0100
      Re: Webseiten mit Username und Passwort aufrufen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-11-14 19:56 +0100
  Re: Webseiten mit Username und Passwort aufrufen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-11-12 23:06 +0100
    Re: Webseiten mit Username und Passwort aufrufen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-11-13 00:14 +0100
      Re: Webseiten mit Username und Passwort aufrufen Thomas Meyer <ich.will@keine.mail> - 2015-11-13 09:14 +0100
        Re: Webseiten mit Username und Passwort aufrufen Claus Reibenstein <4spamersonly@kabelmail.de> - 2015-11-16 09:11 +0100
          Re: Webseiten mit Username und Passwort aufrufen Thomas Mlynarczyk <thomas@mlynarczyk-webdesign.de> - 2015-11-16 10:15 +0100
            Re: Webseiten mit Username und Passwort aufrufen Claus Reibenstein <4spamersonly@kabelmail.de> - 2015-11-16 22:06 +0100
              Re: Webseiten mit Username und Passwort aufrufen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-11-16 22:52 +0100
                Re: Webseiten mit Username und Passwort aufrufen Thomas Meyer <ich.will@keine.mail> - 2015-11-17 18:29 +0100
      Re: Webseiten mit Username und Passwort aufrufen Andreas Treichel <gmblar@gmail.com> - 2015-11-14 17:02 +0100

csiph-web