IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Se connecter au net quand PHP est derrière un proxy


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Se connecter au net quand PHP est derrière un proxy
    Bonjour,

    Je développe actuellement un portail intranet en PHP et je souhaite extraire des informations depuis des flux RSS pour les afficher dans une page.
    Le problème, c'est que notre connexion Internet est filtrée par un proxy qui nécessite une identification par user et password.
    Je souhaite donc savoir quelles options se présentent à moi.
    - configurer le serveur Apache pour lui dire qu'il doit passer par telle adresse pour se connecter au net en passant les login et mot de passe en argument.
    - passer les paramètres de connexion vers le net (url du proxy, login et pass) directement dans le code PHP.

    Qu'est-il possible de faire ?

  2. #2
    Membre actif Avatar de speedy_g
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 213
    Points : 242
    Points
    242
    Par défaut
    Que penses-tu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://php.net/manual/fr/function.fsockopen.php
    ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    En passant par la fonctionnalité allow_url_fopen (PHP >= 5), il faut redéfinir les options de contexte.

    Ceci peut être fait de manière globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    stream_context_get_default(
        array(
            'http' => array(
                'proxy' => 'tcp://IP:PORT'
            )
        )
    );
     
    $content = file_get_contents('http://www.developpez.com/');
    Ou individuellement (propre à chaque requête) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $content = file_get_contents('http://www.developpez.com/', 0,
        stream_context_create(
            array(
                'http' => array(
                    'proxy' => 'tcp://IP:PORT'
                )
            )
        )
    );
    Sinon des extensions comme cURL ont des options pour gérer cela (CURLOPT_PROXY, CURLOPT_PROXYUSERPWD, etc).

    Voir éventuellement la fonction libxml_set_streams_context.


    (non testé)

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci d'avoir répondu aussi vite.
    Alors pour vous apporter plus de précisions, j'ajoute que fsockopen ne passe pas du tout. J'ai déjà essayé.
    Ensuite, pour répondre à Julp. J'ai aussi procéder avec le stream_context.
    Seulement, ça ne passe pas. Alors dans ce cas là, je ne suis pas non plus certain d'avoir correctement utiliser cette fonction car je ne connais pas réellement les variables qu'il est possible de passer. J'avais essayé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    stream_context_get_default(
        array(
            'http' => array(
                'proxy_host' => 'XXX.XXX.XXX.XXX', //l'ip du proxy
                'proxy_port' => '8080',
                'proxy_user' => 'mon_id',
                'proxy_pass' => 'mon_password'
            )
        )
    );
    L'autre question que je me posais concerne le proxy. Tous nos navigateurs pointent vers un fichier de configuration automatique (*.pac) pour accéder au proxy. Est-ce que je peux mettre l'adresse du fichier dans le proxy_host ?
    A ce moment là, je n'aurais pas à configurer le port ?

    Concernant CURL, je voulais savoir s'il est possible de récupérer le flux RSS comme avec l'objet DOM ?
    Ais-je plus de chances d'y arriver avec CURL ?

    Merci encore pour vos réponses.


    Et je viens de réessayer avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    stream_context_get_default(
    		    array(
    		        'http' => array('proxy_host'     => "ip_proxy",
                                                'proxy_port'     => 8080,
                                                'proxy_login'    => "id",
                                                'proxy_password' => "pass")
    		    )
    		);
     
    		$content = file_get_contents('http://www.developpez.com/');

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est du Javascript, donc non, du moins pas directement. (cf FAQ cURL)

    Et n'inventez pas des options de contexte : PHP (>= 5.1) n'en a qu'un nommé proxy et il doit s'agir d'une URI. Toutes les déclinaisons proxy_port, proxy_login, etc n'existent pas.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Excuse moi, je suis mort de rire à la lecture de ton dernier message.
    Je me sens parfaitement stupide.

    Donc, j'ai utilisé des variables qui n'existent pas. Mea culpa, j'ai trouvé ça dans un post sur Internet (moi qui croyait naïvement qu'il s'agissait de personnes éclairées).

    En parcourant les infos que tu as mis en lien, je n'ai pas vu de variable de contexte pouvant contenir mes identifiants. Est-ce qu'il est possible de passer des arguments à la suite de l'URL et du port ?

    Sinon pour CURL, je peux essayer de me débrouiller avec ce que je récupère.
    J'ai fais un test avec mais je récupère un flux avec une erreur renvoyée par le proxy. Bon c'est un début. Je remet un bout de code demain.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par FireCracker Voir le message
    Est-ce qu'il est possible de passer des arguments à la suite de l'URL et du port ?
    Pas de quoi essayer mais apparemment non en fait (peu importe le wrapper).

    cURL à moins que ça ne puisse passer dans les entêtes (via l'option/clé header - 'header' => 'Proxy-Authorization: Basic ' . base64_encode('user:pass') . "\r\n";).

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Salut,

    Alors j'ai revu tout le code CURL. J'ai repris en fait le code d'une réponse de Sergei888 (que je remercie au passage ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ch = curl_init("http://www.bidule.com");
    curl_setopt($ch,CURLOPT_PROXYTYPE ,'URLPROXY_HTTP');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_PROXY, 'ip_proxy:port_proxy');
    curl_setopt($ch,CURLOPT_PROXYAUTH,'URLAUTH_ANY');
    curl_setopt($ch,CURLOPT_PROXYUSERPWD,'mon_login:mon_mot_de_passe');
     
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
    Donc, c'est résolu.

    Je vous remercie encore.

    Et pour répondre à ma propre question, une fois qu'on a récupéré le flux dans la variable $data, il est ensuite possible de l'utiliser comme un fichier XML avec DOM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $dom = new DomDocument();
     
    $dom->loadXML($data);
     
    $item=$dom->getElementsByTagName("item")->item(0);
    //etc...

  9. #9
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Je me demande comment Curl envoie cette fameuse requête avec login/mdp, ce serait intéressant de mater la source
    Vive les roues en pierre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PC portable] mon laptop plante plante quand il est connecté à son chargeur
    Par pro132000 dans le forum Ordinateurs
    Réponses: 12
    Dernier message: 13/07/2011, 12h14
  2. activer fonction quand checkbox est cochée dans formulaire php
    Par knebhi dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/10/2010, 12h26
  3. [MySQL] un objet peut t'il se connecter quand il est en PDO?
    Par keokaz dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 28/03/2010, 18h33
  4. tester si un ordi est connecté au net
    Par iznogoud_23 dans le forum Web & réseau
    Réponses: 8
    Dernier message: 25/09/2009, 14h49
  5. se connecter à un PC qui est derrière un routeur par socket?
    Par damien99 dans le forum Développement
    Réponses: 12
    Dernier message: 10/05/2007, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo