Utiliser un Proxy en PHP

Invité
Invité n'ayant pas de compte PHPfrance

05 sept. 2007, 14:05

Bonjour a toutes et a tous,

Je viens à vous aujourd'hui pour avoir quelques conseils et informations concernant l'utilisation de Proxy.

Dans le cadre d'un projet personnel, je souhaiterai créer un site permettant a des personnes de surfer sur la toile anonymement en passant, a chaque connexion, par un Proxy différent. (ex: http://anonymizer.nntime.com/)
Je possède une base de données comportant une dizaine de Proxy (adresse IP et port) et je souhaiterai savoir comment il est possible de determiner "logicellement" le Proxy à utiliser, Proxy qui aura été choisi au hasard dans ma base auparavant.


Le principe de ce site serai un formulaire avec un champ de saisis et un bouton. Ce formulaire pointerai vers une page script.php qui se chargerai d'afficher la réponse correpondante à l'adresse saisie par l'utilisateur.

Mon problème :
Je ne connais pas les fonctions susceptibles de m'aider à réaliser cela.
Je suis actuellement sur la piste de fsockopen() mais je n'ai trouvé qu'un exemple d'authentification à un Proxy, et non pas faire appel à une page web via un Proxy.

Merci d'avance pour votre aide.

Petit nouveau ! | 4 Messages

05 sept. 2007, 14:07

désolé, j'avais oublié de me connecter.

Mammouth du PHP | 505 Messages

05 sept. 2007, 16:06

Le zend framework est capable de gérer des connexions http via un proxy.

http://framework.zend.com/manual/en/zen ... pters.html

Petit nouveau ! | 4 Messages

06 sept. 2007, 12:20

Bonjou titerm et merci pour ta reponse.

J'ai néanmoins un gros probleme, ma page php ne trouve pas la libraire des classes Zend.

voici mon code de test:
<?php
define("ZEND_FRAMEWORK_DIR", "C:/DevTools/Wamp/php/ZendFramework/library");

set_include_path(
	".".PATH_SEPARATOR.
	ZEND_FRAMEWORK_DIR.PATH_SEPARATOR.
	get_include_path());

$client = new Zend_Http_Client('http://www.google.com',
	array(	'maxredirects' => 0,
		   'timeout'      => 30));

echo $client->request();
?>
et voici le resultat de ma page:
Fatal error: Class 'Zend_Http_Client' not found in C:\DevTools\Wamp\www\Anonimyzer\index.php on line 9

je ne vois pas du tout ce que je peux faire de plus pour que cela fonctionne.

Merci pour votre aide.


EDIT : je tourne sous serveur WampServer avec PHP Version 5.2.4.

Mammouth du PHP | 505 Messages

06 sept. 2007, 16:51

Bah tu mets biens a jours l'include path vers la racine de la librairie... mais ca n'inclue pas pour autant toutes les classes du framework et heureusement vu le nombre.


soit tu te la joues moyenâgeuse et tu fais l'include à la main
include_once('Zend/Http/Client.php');
Soit tu te la joues fainéant et tu utilises l'autoloader
Ajoute cette ligne de code après le set_include_path
Zend_Loader::registerAutoload();
Perso, je suis plutôt coté fainéant.

Petit nouveau ! | 4 Messages

06 sept. 2007, 18:26

Bonjour et merci pour ta reponse mais cela ne fonctionne pas si on ajoute juste ce que tu as dis.

il faut egalement ajouter au tout debut du script
require_once("Zend/Loader.php");
sans quoi, il ne trouve pas non plus la class ZendLoader.

j'ai neanmoins d'autres soucis.

quand je vais vers la site http://www.mon-ip.com cela fonctionne parfaitement avec une nouvelle adresse IP. en revanche lorsque je me dirige vers http://www.google.com cela ne fonctionne plus et le resultat est une page blanche.
voici mon code actuel:
<?php
//DEBUT INITIALISATION
define("ZEND_FRAMEWORK_DIR", "C:\\DevTools\\Wamp\\php\\ZendFramework\\library");

set_include_path(
	".".PATH_SEPARATOR.
	ZEND_FRAMEWORK_DIR.PATH_SEPARATOR.
	get_include_path());

require_once "Zend/Loader.php";
Zend_Loader::loadClass("Zend_Http_Client");
//FIN INITIALISATION

$url = "http://www.google.com";
$proxy = "211.14.6.216";
$port = 80;


//les parametres de configuration
$config = array(
	"adapter"    => "Zend_Http_Client_Adapter_Proxy",
	"proxy_host" => $proxy,
	"proxy_port" => $port,
);

//instantiation de l'objet Zend_Http_Client
$client = new Zend_Http_Client($url, $config);
$response = $client->request();
echo $response->getBody();

?>
alors que si je vais vers http://www.google.fr cela fonctionne.

Quelqu'un aurai-t-il une idée de la raison de ce comportement ?

Merci d'avance.

Petit nouveau ! | 4 Messages

10 sept. 2007, 12:10

Personne n'a une idées sur la raison de ce disfonctionnement ?

Eléphanteau du PHP | 39 Messages

11 sept. 2007, 04:29

Bonjour Jocker,

il te faut analyser l'entete http car si tu regardes bien quand tu tapes sur ton navigateur www.google.com celui-ci te redirige vers www.google.fr.
En fait le site www.google.com va analyser ton ip et en fonction de sa provenance il te redirigera vers le site google correspondant à ton pays. Cela ce traduit par une redirection avec un status code 302 pour "Found".
Ton proxy devra analyser le status code qui se trouve dans l'entete HTTP et en fonction de cela récupérer la nouvelle URL en cas de status code 302.

Plus d'infos sur les status code HTTP http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 sept. 2007, 08:21

Bonjour,

Regarde également du côté de la librairie CURL, elle permet de gérer facilement l'utilisation d'un proxy:
 curl_setopt($ch, CURLOPT_PROXY, 'proxy_ip:proxy_port');
http://fr.php.net/curl
Quand tout le reste a échoué, lisez le mode d'emploi...