Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #3534
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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