Der erste Parameter fuer fsockopen() ist
nur der Hostname.
Kein Protokoll, und keine Pfade.
Das Problem ist, dass Du mit HTTPS arbeiten willst. Dafuer willst Du wohl auch mit den OpenSSL-Funktionen von PHP arbeiten muessen.
Normales HTTP ist kein Problem, jedoch laeuft ja HTTPS SSL-verschluesselt ab. Du musst also erstmal irgendwie das Zertifikat vom Server erfragen, und da faengt's dann schon an.
Man kann ja HTTPS nicht einfach mit Ethereal mitloggen und dann gucken was abgeht.
Nachtrag:
Okay, ich hab grad mal was rumgeguckt, und es gibt nun im Grunde 3 Moeglichkeiten:
- Du kannst die CURL-Funktionen nutzen.
Das duerfte wohl das einfachste sein.
- Du kannst die OpenSSL-Funktionen nutzen.
Damit duerftest Du auch zum Ziel kommen.
Folgende Dokumente duerften da fuer Dich interessant sein:
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
RFC 2818 - HTTP Over TLS
RFC 2246 - The TLS Protocol
- Du hast ein Problem.
So, ich hab mir grad mal OpenSSL in mein PHP gebacken und kann nun per HTTPS Daten abholen.
Das ist soweit kein grosses Problem.
Bei fsockopen() wird dann nur ssl:// vor den Hostnamen gesetzt und schon geht es.
Das Problem bei der Sache ist nur diese unschoene Warnung:
Warning: fread() [function.fread]: SSL: fatal protocol error in /usr/local/apache/htdocs/httpconnection.class.php on line 111
Ich hab vorhin mal etwas im Internet rumgeguckt und es scheint irgendwie ein Problem von PHP selbst zu sein, und nicht vom Script.
Man koennte daher mit einem @ vor fread() die Warnung unterdruecken.
Nicht ganz fein, aber was will man machen wenn PHP da ein Problem hat?
Ansonsten macht das Script aber was es soll. Ueber HTTPS die Daten abholen.
Dieses Problem besteht auch in den aktuellsten Versionen von PHP, also zur Zeit 4.4.0 und 5.0.5.
Mit PHP 4.4.0 konnte ich aber garnicht mit
PHP:
fsockopen("ssl://localhost",10000);
verbinden.
Der Grund duerfte wohl hier liegen:
phpinfo() PHP5 hat gesagt.:
Registered PHP Streams php, file, http, ftp, compress.bzip2, compress.zlib, https, ftps, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
phpinfo() PHP4 hat gesagt.:
Registered PHP Streams php, http, ftp, compress.bzip2, compress.zlib, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp
Denn prinzipiell ist OpenSSL in beiden Version vorhanden.
phpinfo() hat gesagt.:
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.7e 25 Oct 2004
CURL hab ich jetzt nicht getestet. Ich weiss nicht ob es dort evtl. auch zu diesem Fehler kommt und wie es da unter PHP4 aussieht.
Aber fuer Variante 2 (OpenSSL) gilt, dass Du wohl PHP5 mit OpenSSL-Support benoetigst und die Warnung von fread() unterdruecken musst.
Nachtrag 2:
Dennis Wronka hat gesagt.:
Ich hab vorhin mal etwas im Internet rumgeguckt und es scheint irgendwie ein Problem von PHP selbst zu sein, und nicht vom Script.
Das scheint wohl nur zum Teil zu stimmen.
Produziert wird der Fehler durch Webserver welche die Uebertragung nicht so ganz richtig hinbekommen. PHP scheint nur nicht ganz in der Lage zu sein dieses Problem zu handhaben.
Mir ist dieses Problem bei Webmin begegnet. Die Infos welche ich zum Thema im Internet gefunden hab bezogen sich auf IIS.
Aber weiterhin stimmt, dass es nicht am Script liegt. Sondern eher an nicht richtigem Zusammenspiel zwischen Webserver und PHP.