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 :

[Système] Simuler un formulaire avec fsockopen()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut [Système] Simuler un formulaire avec fsockopen()
    Bonjour,

    je developpe un site avec un peu d'ajax dedans (xmlHTTPrequest) et j'ai besoin de poster (methode POST) des variables vers un server ayant un domaine différent. Pour raison de sécurité, les navigateurs interdisent l'utilisation de xmlHTTPrequest sur un domaine différent du server initial.

    J'ai donc eu l'idée de créé une page php qui me servira à effectuer le POST.
    Le seul soucis c'est que le fsockopen me provoque un Maximum execution time. (le script tourne en boucle donc).
    et je ne vois ce qui ne va pas dans mon script.
    Merci d'avance pour votre aide.

    Cyril

    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
     
    <?
    $site = "www.site_avec_un_autre_domaine.com";
    $url = "/la_page_cible.php";
     
    // Build your POST query
    $req = "var1=$v1&var2=$v2&var3=$v3";
    $header="";
     
    // Header info to connect to the server
     
    $header .= "POST $url HTTP/1.1\r\n";
    $header .= "HOST: $site \r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= 'Content-Length: ' . strlen($req) . "\r\n\r\n";
    $header .= "Connection: close\r\n\r\n";
     
     
     // Open up a connection on port 80 to server
     $fp = fsockopen ($site, 80, $errno, $errstr, 30);
     stream_set_timeout($fp, 2);
     
     echo "<br><br>".$site;
     
     // Can't connect? Then DIE!
     if (!$fp)
     	die("I couldn't connect to $site<br>Erreur n°$errno <br>$errstr" ); 
     
    // send POST request
    fputs($fp, $header . $req); 
     
    // evite une éventuelle attente
    flush();
     
    // Receive POST request
    $response = "";
    while ( !feof($fp) ) {
    		$response = fread($fp,2000);
    		echo $response;
    }
     
    // ferme la connexion
    fclose($fp);
    ?>

  2. #2
    Membre expérimenté

    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
    Par défaut
    Si vous pouvez utiliser Curl, je vous le recommande car cette librairie/extension est bien plus pratique à utiliser dans ce genre de cas.

    Qu'est-ce qui ne marche pas exactement (si ça marche quel code HTTP obtenez-vous) ? Eventuellement, il faut encoder tes données (fonction urlencode) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = 'var1=' . urlencode($v1) . '&var2=' . urlencode($v2) . '&var3=' . urlencode($v3);

    Julp.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    le problème c'est que le script ne s'arrete pas en fait.

    dans mon code, je fait un echo du site cible (sur lequel j'envoie mes données en post) avec : echo "<br><br>".$site;

    cela marche bien, j'ai mon le site qui s'affiche, mais la page ne se charge pas completement (ca mouline) jusqu'a ce que le Maximum execution time soit atteint (soit les 30sec par défaut) et c'est cela que je ne comprend pas

    je vais essayé de voir avec CURL mais si c'est comme PEAR, je comprend pas tout à l'install

    sinon, il n'y a t'il pas moyen de contourner la protection du xmlHTTPrequest ?

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut
    je confirme cURL est bien pratique pour simuler l'envoieen post à partir du serveur.
    Il faut juste executer la librairie sur ton serveur qui logiquement n'ai pas installer de base

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut
    ok, je vais essayé ce soir car la je suis au boulot...
    je vais tenté d'en un premier tps avec urlencode() car je viens de me souvenir que j'ai un pipe ds une de mes chaines de caracteres (mais je pense pas trop que cela soit ca qui laisse la socket ouverte)

    et je vais tenter d'installer curl.

    sinon, en fait la page cible me donne un Maximum execution time à cause de cette boucle je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ( !feof($fp) ) {
    		$response = fread($fp,2000);
    		echo $response;
    }
    apparement, il ne détecte pas le end of file, existe-il un moyen de le contourner/forcer ?

    en tout cas merci pour votre aide

  6. #6
    Membre expérimenté

    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
    Par défaut
    Citation Envoyé par cyriltra
    sinon, en fait la page cible me donne un Maximum execution time à cause de cette boucle je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ( !feof($fp) ) {
    		$response = fread($fp,2000);
    		echo $response;
    }
    C'est fort probable !

    Citation Envoyé par cyriltra
    apparement, il ne détecte pas le end of file, existe-il un moyen de le contourner/forcer ?
    Tenter sans la boucle (sans vous récupéreriez déjà les 2000 premiers caractères avec le fread).


    Julp.

Discussions similaires

  1. Simuler un formulaire avec un fichier dedans
    Par Lomithrani dans le forum Langage
    Réponses: 27
    Dernier message: 13/07/2011, 18h41
  2. Réponses: 1
    Dernier message: 08/03/2010, 08h17
  3. Réponses: 4
    Dernier message: 31/07/2008, 14h39
  4. Valider formulaire web avec fsockopen
    Par madislak dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2008, 00h30
  5. Gestion de formulaire avec xml et sans serveur ?
    Par meliane dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/05/2004, 19h57

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