Internetzugriff über Proxy

Alles, was PHP betrifft, kann hier besprochen werden.

Re: Internetzugriff über Proxy

Postby Harry_X » 24. April 2009 21:01

Wiedmann wrote:Seit PHP5 (anno domini 2003) nimmt man dafür, wie offiziell (und kein ucn) im Handbuch beschrieben, den passenden Stream-Context. Das wirst doch damit jetzt hinbekommen haben?


es handelte sich bis dato nur um ein paar vorüberlegungen und tests - konkret wurde bis jetzt nichts gemacht. Ob und wie es damit weitergeht, weiß ich noch nicht.
Harry_X
 
Posts: 14
Joined: 24. April 2009 10:42

Re: Internetzugriff über Proxy

Postby Wiedmann » 24. April 2009 21:29

konkret wurde bis jetzt nichts gemacht.

Nur weil du halt wohl schonmal was mit fsockopen getestet hattest.

Ob und wie es damit weitergeht, weiß ich noch nicht.

Zumindest könntest dann sagen du weist wie's geht, aus eigener Erfahrung ;-)

Aber der Context macht ja Sinn. Um Daten über ein Standardprotokoll auszutauschen, nimmt man ja eben normal dir regulären Dateifunktionen und eben (automatisch) einen passenden Stream-Wrapper. Standardmäßig ist das halt der für das Dateisystem. Und wenn du "http://" im "Dateiname" hast, ist das halt der HTTP-Client (Wrapper) in PHP. Jeder Wrapper ist wiederrum über den Context konfigurierbar.

Der Defaultcontext, den die Dateisystemfunktionen automatisch nehmen, ist eben erst ab 5.3.0 konfigurierbar. Also erzeugt man einen neuen Context, und konfiguriert diesen auf z.B. Proxy-Benutzung. Und dann sagt du einfach deinem normalen readfile, file_get_contents, fopen, was auch immer, es soll diesen Context benutzen.

Code: Select all
<?php
$content= readfile("http://www.xampp.de");
echo $content;
?>

die Proxy-Einstellungen wären zB "http://meinproxy.de" , Port 81

Sollte so grundsätzlich tun:
Code: Select all
<?php
$context = stream_context_create(array('http' => array('proxy' => 'tcp://meinproxy.de:81', 'request_fulluri' => true)));

$content = file_get_contents('http://www.xampp.de/', false, $context);
echo $content;
?>

readfile() wäre hier eh die falsche Funktion gewesen.

(BTW. Das mit dem Stream-Context gab es auch schon in PHP4, nur konnte man das da nicht direkt in z.B. readfile() benutzen.)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Internetzugriff über Proxy

Postby Nobbie » 25. April 2009 11:22

Wiedmann wrote:Der Krampf mit fsockopen war aber auch nur eine Notlösung bei PHP4 (falls kein Curl verfügbar war).

Seit PHP5 (anno domini 2003) nimmt man dafür, wie offiziell (und kein ucn) im Handbuch beschrieben, den passenden Stream-Context. Das wirst doch damit jetzt hinbekommen haben?


Ne, ganz ganz sicher nicht. Wenn überhaupt irgendetwas "Krampf" ist, dann ist das der total verkorkste Ansatz des Stream Contexts. Das ist ein schönes Beispiel, wie sich eine Anfangs noch halbwegs vertretbare Idee (normale Dateifunktion via Wrapper auf andere Protokolle zu wrappen) in eine Richtung verselbständigt, die an Sinnlosigkeit und Krampfhaftigkeit nicht zu toppen ist. Auch PHP Entwickler sind offensichtlich nur Menschen.

Was haben wir denn?

Irgendwann kam mal jemand auf die Idee, die normalen Dateifunktionen auch auf andere Protokolle zu wrappen. Diese Schnittstelle, die ich da schon zweifelhaft fand, hatte ihre einzige Existenzberechtigung darin, den unbedarften Programmierer nicht mit Kenntnissen etwas schwierigerer Protokolle (wie beispielsweise HTTP) zu belasten. Ein simple fopen() oder file_get_content() usw. führt im Zweifel einen GET-Request auf eine URL aus. Fand ich wie gesagt immer schon zweifelhaft, aber immerhin konnte man damit auch ohne Kenntnisse von HTTP einfache Requests durchführen. Für die anspruchsvolleren Dinge gab (und gibt es zum Glück) natürlich die Möglichkeit, etwas näher am Protokoll mit fsockopen vollständige Requests auszuführen.

Dann fiel offensichtlich jemand auf, dass natürlich die Möglichkeiten des Wrappers sehr beschränkt sind - das liegt in der Natur der Sache, wenn man eine stark vereinfachte API anbieten will. Und anstatt das nun so zu lassen wie ist, wurde die völlig kaputte Idee entwickelt, für die anspruchsvolleren Dinge einen Stream Context zu definieren. Nur - für wen ist denn diese Schnittstelle gedacht? Die Bedienung ist keinesfalls einfacher als über die bekannte API fsockopen() usw., sie erfordert gleichermaßen massive Kenntnisse über das benötigte Protokoll (im Prinzip muss der komplette Request definiert werden, je nach Anspruch) um dann schließendlich (Halleluja!) nach intensiven und tiefgreifenden Kenntnis erfordernden Vorbereitung "endlich" doch die (dafür eigentlich nie angedachte) file-Funktion verwenden zu können, wrappen um des wrappens Willen, sinnfrei und schlecht bedienbar. Der Programmcode ist weder einfacher, noch kürzer, noch besser wartbar, noch besser bedienbar.

Krampf hoch zehn! Und was gewinnt man: nichts! Weil der Programmierer, der die Protokolle kennt, schon seit anno dunnemal fsockopen benutzt, und weil die Programmierer, die die Protokolle nicht kennen, auch die Stream Sockets nicht bedienen können. Und weil das alles problemlos, mit nahezu identischen Programmzeilen seit eh und je via fsockopen möglich war und ist - und da gehört es auch hin. Nur um mit Allgewalt einen Teil der file-Funktionen bedienen zu können, wird so ein Riesenkrampf veranstaltet? Die darf benutzen wer will - ich benutze sie ganz sicher nicht.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Previous

Return to PHP

Who is online

Users browsing this forum: No registered users and 19 guests