fsockopen durch proxy tunneln
egon223
- php
hallo,
ich habe ein problem und zwar hab ich einen apache server auf einem firmenrechner laufen, dieser muss jedoch um ins internet zu gelanden durch einen internen proxyserver, bei dem user und passwort erforderlich sind. wie kann ich jetzt eine html seite im klartext herunterladen? kann
mir jemand ein beispielscript posten??
gruss egon
Halihallo egon223
ich habe ein problem und zwar hab ich einen apache server auf einem firmenrechner laufen, dieser muss jedoch um ins internet zu gelanden durch einen internen proxyserver, bei dem user und passwort erforderlich sind. wie kann ich jetzt eine html seite im klartext herunterladen?
Wer muss über Proxy ins Internet? - Du (der Client) oder der Server?
Wenn Du über den Proxy ins Netz musst, so stelle über PHP einfach
eine Verbindung mit dem Proxy statt Webserver her.
Wenn der Apache über Proxy ins Netz geht (was ich mir nicht
vorstelle, denn sowas hab ich noch nicht gesehen! - Du hast dich
aller Wahrscheinlichkeit nach falsch ausgedrückt), so kümmert dich
das als Endempfänger wenig.
User und Passwort beim Proxy... lies:
http://rfc.sunsite.dk/rfc/rfc2617.html
da steht alles, was du in diesem Zusammenhang wissen musst drin.
Viele Grüsse
Philipp
Hallo egon,
ich habe ein problem und zwar hab ich einen apache server auf einem firmenrechner laufen, dieser muss jedoch um ins internet zu gelanden durch einen internen proxyserver, bei dem user und passwort erforderlich sind. wie kann ich jetzt eine html seite im klartext herunterladen? kann
mir jemand ein beispielscript posten??
Das steht in den User-Kommentaren. Such mal auf http://www.php.net/manual/en/function.fsockopen.php nach »Sherif Gayed«.
Schöne Grüße,
Johannes
Halihallo Johannes
Das steht in den User-Kommentaren. Such mal auf http://www.php.net/manual/en/function.fsockopen.php nach »Sherif Gayed«.
Oha. Erstens geht er von einem Proxy ohne Authentifizierung aus,
zweitens ist die Implementierung IMO fehlerhaft:
Aus RFC 2616:
<cite>
1. If Request-URI is an absoluteURI, the host is part of the
Request-URI. Any Host header field value in the request MUST be
ignored.
2. If the Request-URI is not an absoluteURI, and the request includes
a Host header field, the host is determined by the Host header
field value.
</cite>
und
<cite>
A "transparent proxy" is a proxy that does not modify the request or
response beyond what is required for proxy authentication and
identification. A "non-transparent proxy" is a proxy that modifies
the request or response in order to provide some added service to
the user agent, such as group annotation services, media type
transformation, protocol reduction, or anonymity filtering.
</cite>
Der Proxy hat selber überhaupt nichts mit dem Host-Header zu tun. Er
leitet diesen nur weiter. Der Proxy erkennt seinerseits den Ziel-
Rechner wahlweise über die absolute URI (falls vorhanden), oder dem
Host-Header (welcher im Beispiel falsch ist, denn er MUSS dem Ziel-
Rechner entsprechen, falls keine absolute URI vorliegt).
Also: Der HTTP-Request als solcher ändert bei einem Proxy ohne
Authentifizierung überhaupt nicht (oder muss nicht). Der Client muss
einfach den Request nicht an den Ziel-Server, sondern an den Proxy
senden. Bei Proxies mit Authentifizierung kommt ein Proxy-
Authenticate-Header hinzu.
Das Fakt dass sein Beispiel funktioniert, basiert alleine auf der
Tatsache, dass der Server das Host-Headerfield ignorieren MUSS, wenn
eine Absolute URL im Request gesendet wird.
Viele Grüsse
Philipp
Hallo Philipp,
Oha. Erstens geht er von einem Proxy ohne Authentifizierung aus,
zweitens ist die Implementierung IMO fehlerhaft:
Hm, scheint so. Ich hatte mir den Eintrag auch nicht näher angesehen, sondern nur mal geguckt, ob ich nicht im Manual was dazu finde.
Schöne Grüße,
Johannes
Halihallo, dies zur allgemeinen Kenntnisnahme ;-)
Das Fakt dass sein Beispiel funktioniert, basiert alleine auf der
Tatsache, dass der Server das Host-Headerfield ignorieren MUSS, wenn
eine Absolute URL im Request gesendet wird.
BTW. Meinen Tests zur Folge unterstützt http://www.boa.org
dieses absolute URI-Schema nicht. Dort muss eine relative URL im
Request stehen und dadurch wird der Host-Header unabdingbar.
IMO alle Browser senden stets relative URL's mit Header-Feld. Mit
anderen Worten: Wenn PHP als HTTP-Client eingesetzt werden soll,
sollte man sich relativen URL's im GET/POST/... Header und einem
entsprechend gesetzten Host-Feld bemühen.
@Johannes: Es war ja Sherif's Irrtum :-)
Viele Grüsse
Philipp