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 :

Paramétrer un proxy en php (WAMP)


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Paramétrer un proxy en php (WAMP)
    Bonjour,

    je suis débutant en php. Je souhaiterai me connecter à l'API twitter streaming via un fsockopen (le but est de récuperer des tweets via twitter). Le problème c'est que je dois l'utiliser à la fac qui possède un proxy ! (En clair j'ai un double proxy à paramétrer, celui de l'api à laquelle je veux accéder et le proxy de la fac). Je ne sais pas comment m'y prendre. Pouvez-vous m'éclairer ?

    Le bout de code qui me sert à me connecter à twitter streaming

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $fp = fsockopen("ssl://stream.twitter.com", 443, $errno, $errstr, 30);
    if (!$fp){
        echo "ERROR: Twitter Stream Error: failed to open socket";
    } else{ 
        //la requête vers l'api streaming
    }
    Tout fonctionne chez moi mais pas à la fac...


    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ton fsockopen doit se connecter au proxy et ensuite tu envois via fputs les requête http nécessaire en oubliant pas d'ajouter les identifiants si besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $proxy = 'my.proxy.com'; 
    $proxy_port = 8080; 
    $proxy_user = "user"; 
    $proxy_pass = "pass"; 
    $proxy_cont = ''; 
    $request_url = "https://stream.twitter.com"; 
     
    $proxy_fp = fsockopen($proxy, $proxy_port); 
    if (!$proxy_fp)
    { 
    	echo 'IMPOSSIBLE DE CONTACTER LE PROXY';
    }	
    else
    {
    	fputs($proxy_fp, "GET $request_url HTTP/1.0\r\nHost: $proxy\r\n");
    	//Supprimer si pas d'authentification
    	fputs($proxy_fp, "Proxy-Authorization: Basic ". base64_encode ("$proxy_user:$proxy_pass")."\r\n\r\n");
    }
    Y'a pas mal d'exemple dans la doc de http://www.php.net/manual/fr/function.fsockopen.php dans les commentaires.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour Grunk,
    merci pour votre aide. J'ai essayé avec ma collègue votre solution mais elle ne fonctionne pas. Nous ne récupérons aucun tweet à la fac.
    Je vais mettre tout le code de ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    public function start(array $_keywords){
        while(1){
    	$proxy = 'myproxy'; 
    	$proxy_port = myport; 
    	$proxy_cont = ''; 
    	$request_url = "ss1://stream.twitter.com:443"; 
     	$fp = fsockopen($proxy, $proxy_port);
    	if (!$fp){ 
    		echo 'IMPOSSIBLE DE CONTACTER LE PROXY';
    	}
    	else{
    	        fputs($fp, "GET $request_url HTTP/1.0\r\nHost: $proxy\r\n");
    		$data = 'track=' . rawurlencode(implode($_keywords, ','));			
                    $this->m_oauth_timestamp = time();
                    //
                    // generate the base string based on all the data
                    //
                    $base_string = 'POST&' .
                        rawurlencode('https://stream.twitter.com/1.1/statuses/filter.json') . '&' .
                        rawurlencode('oauth_consumer_key=' . $this->m_oauth_consumer_key . '&' .
                        'oauth_nonce=' . $this->m_oauth_nonce . '&' .
                        'oauth_signature_method=' . $this->m_oauth_signature_method . '&' .
                        'oauth_timestamp=' . $this->m_oauth_timestamp . '&' .
                        'oauth_token=' . $this->m_oauth_token . '&' .
                        'oauth_version=' . $this->m_oauth_version . '&' .
                        $data);
                    //
                    // generate the secret key to use to hash
                    //	
                    $secret = rawurlencode($this->m_oauth_consumer_secret) . '&' .
                        rawurlencode($this->m_oauth_token_secret);
                    //
                    // generate the signature using HMAC-SHA1
                    //
                    // hash_hmac() requires PHP >= 5.1.2 or PECL hash >= 1.1
                    //
                    $raw_hash = hash_hmac('sha1', $base_string, $secret, true);
                    //
                    // base64 then urlencode the raw hash
                    //
                    $this->m_oauth_signature = rawurlencode(base64_encode($raw_hash));
                    //
                    // build the OAuth Authorization header
                    //
                    $oauth = 'OAuth oauth_consumer_key="' . $this->m_oauth_consumer_key . '", ' .
                            'oauth_nonce="' . $this->m_oauth_nonce . '", ' .
                            'oauth_signature="' . $this->m_oauth_signature . '", ' .
                            'oauth_signature_method="' . $this->m_oauth_signature_method . '", ' .
                            'oauth_timestamp="' . $this->m_oauth_timestamp . '", ' .
                            'oauth_token="' . $this->m_oauth_token . '", ' .
                            'oauth_version="' . $this->m_oauth_version . '"';
                    //
                    // build the request
                    //
                    $request  = "POST /1.1/statuses/filter.json HTTP/1.1\r\n";
                    $request .= "Host: stream.twitter.com\r\n";
                    $request .= "Authorization: " . $oauth . "\r\n";
                    $request .= "Content-Length: " . strlen($data) . "\r\n";
                    $request .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
                    $request .= $data;
                    //
                    // write the request
                    //
                    fwrite($fp, $request);
                    //
                    // set it to non-blocking
                    //
                    stream_set_blocking($fp, 0);
                    while(!feof($fp)){
                        $read   = array($fp);
                        $write  = null;
                        $except = null;
                        //
                        // select, waiting up to 10 minutes for a tweet; if we don't get one, then
                        // then reconnect, because it's possible something went wrong.
                        //
                        $res = stream_select($read, $write, $except, 600, 0);
                        if ( ($res == false) || ($res == 0) ){
                            break;
                        }
                        //
                        // read the JSON object from the socket
                        //
                        $json = fgets($fp);
                        //
                        // look for a HTTP response code
                        //
                        if (strncmp($json, 'HTTP/1.1', 8) == 0){
                            $json = trim($json);
                            if ($json != 'HTTP/1.1 200 OK'){
                                echo 'ERROR: ' . $json . "\n";
                                return false;
                            }
                        }
                        //
                        // if there is some data, then process it
                        //
                        if ( ($json !== false) && (strlen($json) > 0) ){
                            //
                            // decode the socket to a PHP array
                            //
                            $data = json_decode($json, true);
                            if ($data){
                                $this->process_tweet($data,$_keywords);
                            }
                        }
                    }
                }
                fclose($fp);
            }
            return;
        }
    Nous avons essayé de changer l'url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request_url = "https://stream.twitter.com";
    sans succès

    Merci pour votre aide

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs($proxy_fp, "GET $request_url HTTP/1.0\r\nHost: $proxy\r\n");
    était un exemple pour la forme.

    Dans ton cas précis c'est la requête POST que tu construit un peu plus bas qu'il faut envoyer

    Pour voir si la connexion s'établie il faudrait peut être faire une requête faire une page simple et voir si tu as un résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (!$proxy_fp){ 
    	echo 'IMPOSSIBLE DE CONTACTER LE PROXY';
    }	
    else{
    	$data = "";
            fputs($proxy_fp, "GET http://www.google.fr HTTP/1.0\r\nHost: $proxy\r\n");
    	//Supprimer si pas d'authentification
    	fputs($proxy_fp, "Proxy-Authorization: Basic ". base64_encode ("$proxy_user:$proxy_pass")."\r\n\r\n");
            while (!feof($fp)) $data.=fgets($fp,64000);
            fclose($fp);
            echo $datas;
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse,
    on essayera aussi vite que possible et on te tiendra au courant
    Encore merci et bonne soirée

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    j'ai essayé ceci (dans une page séparée) mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $proxy = proxy;
    $proxy_port = port;
    $proxy_fp = fsockopen($proxy,$proxy_port);
    if (!$proxy_fp){ 
        echo 'IMPOSSIBLE DE CONTACTER LE PROXY';
    }    
    else{
        $data = "";
            fputs($proxy_fp, "GET http://www.google.fr HTTP/1.0\r\nHost: $proxy\r\n");
            while (!feof($proxy_fp)) $data.=fgets($proxy_fp,64000);
            fclose($proxy_fp);
            echo $data;
    }

Discussions similaires

  1. Caractères étrange dans paramètres de page en php
    Par kuja2053 dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2007, 13h33
  2. Flash & Php & Wamp
    Par devtroll dans le forum Dynamique
    Réponses: 3
    Dernier message: 06/07/2007, 11h05
  3. [MySQL] Paramétrer des vues en PHP
    Par Sayrus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2007, 21h27
  4. Browser proxy en PHP
    Par robiwan dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2007, 12h06

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