HTTP in Script aufrufen

Hoi zäme,

Habe einen 4-Port Powerswitch, der auf 4 unabhängigen Kanälen einen 230V Verbraucher schalten kann. Das Gerät wird an das IP Netzwerk angeschlossen und kann entweder über ein integriertes Interface oder mit direkten HTTP Befehlen gesteuert werden.
Die 4 Switch werden mit P60 - P64 angesprochen, 1=ON 0=OFF

Die Befehlssequenz wird vom Hersteller vorgegeben.

Ich kann im Browser folgende Zeile ohne Probleme aufrufen:
http://admin:1234@192.168.0.86/Set.cmd?CMD=SetPower&P60=0&P61=0&P62=1&P63=1

Mein Script sieht so aus:
$url = „http://admin:1234@192.168.0.86/Set.cmd?CMD=SetPower&P60=1&P61=1&P62=1&P63=0“;

fopen("$url", „r“);

und gibt folgende Fehlermeldung zurück:
[function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized …

Im Forum habe ich den Ansatz gefunden:
fopen(http://admin:1234@192.168.0.86/Set.cmd?CMD=SetPower&P60=1&P61=1&P62=1&P63=0)
Dies im Zusammenhang mit einer IP-Kamera und deren Anmeldung.

Dieser Ansatz funktioniert bei mir gar nicht.

Wer kann mir Hilfestellung geben?

Hi…

Also ich bin nicht so der PHP-Crack, aber wie lautet denn dein Dateiname? Ich behaupte mal das kann so nicht gehen.

fopen (PHP-Manual) möchte den namen der Datei, die du öffnen willst (f-open -> file open). Parameter sind da nicht vorgesehen soweit ich weiss. Was genau ist set.cmd? Was steht da drin? Und in welchem Zusammenhang hast du das im Forum gefunden? Und was genau willst du damit erreichen? Vielleicht gibts ja ne andere Lösung… WWWReader verwenden vielleicht?

Gruß,

Toni

Hallo,
also fopen() akzeptiert schon eine URL als Dateinamen, wenn die PHP Option allow_url_fopen gesetzt ist. gokart, das sollte bei dir aber standardmäßig der Fall sein, wenn du nicht irgendwo noch eine php.ini hast, die es umdefiniert.

Schau mal bei php.net in der Doku.

So wie es aussieht, hast du den String $url syntaktisch richtig angelegt.

Statt fopen($url,‚r‘) könntest du readfile($url) probieren. Wird aber m.E. das gleiche Ergebnis liefern.

Die Fehlermeldung 'HTTP1.0/401…" deutet eher auf ein Zugriffsproblem hin. Der Webserver erhält deinen Request, aber lehnt ihn ab. Vielleicht hast du dich bei Benutzername/Passwort vertan??

PHP: file_get_contents - Manual

paresy

Habe die Funtkionen file_get_contents, readfile und WWWReader getestet. Alle Aufrufe bringen in etwa die gleiche Fehlermeldung zurück.

Das Gerät reagiert auf den Aufruf, führt aber die Schaltfunktion nicht aus.
Habe den IP-Traffic analysiert und festgestellt, dass für eine erfolgreiche Schaltung im Explorer mehrere Datenpakete ausgetauscht werden. Schwierig zu analysieren was da läuft.

Der Hersteller will mir aber eine Firmwareanpassung vornehmen, damit ich mit einer Telnet Session arbeiten kann.

Warte jetzt mal auf diese Lösung. Bis dahin werde ich diese Anfrage mal abschliessen.

Besten Dank für Eure Bemühungen.

gokart

Wenn Du nicht bis zur Firmwareanpassung warten willst, wäre die Curl-Erweiterung für PHP vieleicht was ?

Einfach mal in der Suche Curl eingeben.

Damit kannst du inclusive https, Passwortgeschütze put oder get Anfragen, bedarfsweise mit Cookies an Server richten und eigentlich automatisiert all das machen, was sonst „händisch“ gemacht wird.

Ist natürlich etwas tricky, sich da reinzufuchsen, lohnt sich aber m.E. sehr: mache damit E-Mail abfragen und Versand, SMS-Versand etc.

Gruß Rolf

Hallo,

evtl. hilft Dir mein SMS-Script als Ideengeber weiter.
Der Trick ist das fputs($sock,"GET $url HTTP/1.0

");

function sms($text,$type,$empfaenger)
{
$url = „http://www.smskaufen.com/sms/gateway/sms.php?id=%ID%&pw=%PASSWORD%&text=%TEXT%&type=%TYPE%&empfaenger=%EMPFAENGER%“;
$placeholder = array(
‚%ID%‘ => „Benutzername“,
‚%PASSWORD%‘ => „passwort“,
‚%EMPFAENGER%‘ => $empfaenger,
‚%TYPE%‘ => $type,
‚%TEXT%‘ => rawurlencode(substr($text, 0, 160)));

$url = strtr($url, $placeholder);
echo $url;
$sock=fsockopen(‚192.22.71.50‘,3128,$errno,$errstr,30);
fputs($sock,"GET $url HTTP/1.0

");
fclose($sock);
}

Anmerkung: ‚192.22.71.50‘,3128 ist unser Proxy-Server