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 :

Envoyer requête post serveur/serveur


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Envoyer requête post serveur/serveur
    Salut tout le monde,

    Je doit intégrer un système de paiement sur un site, et bien sûr, il faut envoyer certaines infos au site dédié. Hors, je n'aimerais pas intégrer des inputs en hidden pour plus de sécurité.

    Questions :
    * Comment je peux envoyer des infos directement au serveur avec redirection ?
    * Comment lire la réponse envoyée par le site du paiement ?

    J'ai cherché au niveau de http et Curl, mais se n'est pas super détaillé. Vous connaissez certains tutos ou méthodes pratique svp ?

    PS : Le site est développé en MVC

    J'espère qu'il y aura qq'un pour m'aider, c'est assez urgent.
    Merci d'avance

  2. #2
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Hello,
    il faut que tu utilise curl.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Ahhh, enfin une réponse
    Grand MERCI John pour ta réponse. L’explication est un peux complexe pour moi, y aurait-il pas un autre tuto stp ou un exemple concret ?

    PS : Y a aussi le ssl qui est activé sur le site, comment je peux l'utiliser ?

    Merci & excellente fête

  4. #4
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    regarde ca :
    http://fr2.php.net/manual/fr/ref.curl.php

    tu initialise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ch = curl_init();

    tu set les options que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    liste des options :
    http://fr2.php.net/manual/fr/function.curl-setopt.php

    tu exécute ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $content = curl_exec( $ch );
    tu récupère des informations sur la requête exécuté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $response = curl_getinfo( $ch );
    tu récupère les erreurs si il y en a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    tu stop la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl_close ( $ch );

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Merci l'ami
    Je l'ai testé et sa marche impec en restant sur le site, mais quand je fais une redirection vers un site externe où j'ai placé un print_r($_POST); et un print_r($_REQUEST); Arrivé sur la page, le POST est vide, et le REQUEST ne contient que [PHPSESSID].

    C'est parce que je suis en localhost ?

    Comment faire pour récupérer ces infos de l'autre coter en sachant qu'il doit y avoir un traitement sur le site de redirection et qui a son tour renverra la réponse après le traitement.

    Dsl je suis un casse tête, mais c'est encore du charabia pour moi Au fait, la session ne se fermera qu'apres la réception, ou dès la redirection

    Merci et excellente journée

    Citation Envoyé par John Blobsmith Voir le message
    regarde ca :
    http://fr2.php.net/manual/fr/ref.curl.php

    tu initialise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ch = curl_init();

    tu set les options que tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
    liste des options :
    http://fr2.php.net/manual/fr/function.curl-setopt.php

    tu exécute ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $content = curl_exec( $ch );
    tu récupère des informations sur la requête exécuté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $response = curl_getinfo( $ch );
    tu récupère les erreurs si il y en a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    tu stop la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl_close ( $ch );

  6. #6
    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
    Si il sagit simplement de faire une requête POST vers un autre serveur y'a pas besoin de CURL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $postdata = http_build_query($mes_donnees);
     
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
     
    $context  = stream_context_create($opts);
    $result = file_get_contents('http://serveur-distant.com/page.php', false, $context);
    Dans $result tu auras la réponse affichée par la page à qui tu auras envoyé la requête.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Je comprend trop ton problème de session et de redirection.

    Il y a des options spécial sur curl pour setter un dossier qui va stoker les cookies. Pour garder un session ouverte il faut juste faire 1 seul curl_init
    au début du groupe de requête et un seul curl_close à la fin.

    @grunk je suis pas sur que tu puisse gérer les cookies et les sessions avec cette méthode.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Re, John
    J'ai vue les fonctions que tu m'as filé, et voila un exemple du code que j'utilise.
    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
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $Array_Posts);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $result = curl_exec($ch);
    <div style="margin-left:40px">
    if($result==false):
    <div style="margin-left:40px">echo 'Erreur Connexion au Site';</div>else: header("Location: $url");
    endif;</div>curl_close($ch);
    J'utilise un seul curl_init() et 1 curl_close(). Mais le site de redirection ne recoit aucune donnée en print_r($_POST);. Le but de tout cela, est que le site qui reçoit les données peut les lire en print_r($_POST);. Si je spécifie un doc de stockage, l'autre site ne pourra pas y acceder.

    Merci encore pour le temps.
    Bonne & Merveilleuse année à toi

    Citation Envoyé par John Blobsmith Voir le message
    Je comprend trop ton problème de session et de redirection.

    Il y a des options spécial sur curl pour setter un dossier qui va stoker les cookies. Pour garder un session ouverte il faut juste faire 1 seul curl_init
    au début du groupe de requête et un seul curl_close à la fin.

    @grunk je suis pas sur que tu puisse gérer les cookies et les sessions avec cette méthode.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Merci grunk
    Merci pour cette solu, cependant, sa génère une erreur :
    ... failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in ...

    ou bien :
    ... failed to open stream: HTTP request failed! HTTP/1.0 405 Method Not Allowed in ...
    C'est du a quoi ?

    Merci et bonne année


    Citation Envoyé par grunk Voir le message
    Si il sagit simplement de faire une requête POST vers un autre serveur y'a pas besoin de CURL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $postdata = http_build_query($mes_donnees);
     
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
     
    $context  = stream_context_create($opts);
    $result = file_get_contents('http://serveur-distant.com/page.php', false, $context);
    Dans $result tu auras la réponse affichée par la page à qui tu auras envoyé la requête.

  10. #10
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Bonne année 2013
    Citation Envoyé par Percepto Voir le message
    J'utilise un seul curl_init() et 1 curl_close(). Mais le site de redirection ne recoit aucune donnée en print_r($_POST); Le but de tout cela, est que le site qui reçoit les données peut les lire en print_r($_POST); Si je spécifie un doc de stockage, l'autre site ne pourra pas y acceder.
    curl te retourne des infos ou des erreurs ?

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Merci idem à toi
    Elle ne me retourne rien puise que je fais la redirection vers l'autre site pour recevoir les données par $_POST, se n'est qu'apres certains traitement sur ce site qu'il me retournera la réponse.

  12. #12
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Et tu peux pas faire un exit avant la redirection avec un var_dump de $response = curl_getinfo( $ch ); pour savoir ce qu'il ce passe ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    avec deux test y a une rep avec une erreur et une autre sans.

    sa m'affiche ce tableau
    Array
    (
    [url] => http://www.url.com/acceuil/
    [content_type] => text/plain
    [http_code] => 302
    [header_size] => 290
    [request_size] => 199
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.044217
    [namelookup_time] => 0.000134
    [connect_time] => 0.0165
    [pretransfer_time] => 0.016502
    [size_upload] => 1359
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 30734
    [download_content_length] => 0
    [upload_content_length] => 1359
    [starttransfer_time] => 0.030404
    [redirect_time] => 0
    [certinfo] => Array
    (
    )

    [redirect_url] => http://www.site.com
    )
    Avec une redirection ver un autre site, y a
    Access forbidden!

    You don't have permission to access the requested object.
    It is either read-protected or not readable by the server.


    If you think this is a server error, please contact
    the webmaster.

    Error 403

    www.site.com

    Wed Jan 2 05:47:43 2013

    Apache
    Avec google sa m'affiche

    405. That’s an error.

    The request method POST is inappropriate for the URL /. That’s all we know.


    Quoi faire ? je commence a être désespéré

    Citation Envoyé par John Blobsmith Voir le message
    Et tu peux pas faire un exit avant la redirection avec un var_dump de $response = curl_getinfo( $ch ); pour savoir ce qu'il ce passe ?

  14. #14
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Hello, j'ai testé ça sur google.fr, ça fonctionne bien, faut juste enlever les options pour le POST.
    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
     
    $url = 'http://www.google.fr';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    //curl_setopt($ch, CURLOPT_POST, true);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, $Array_Posts);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $result = curl_exec($ch);
     
    print_r($result);
    exit;
    Peut-être que les données que tu met dans CURLOPT_POSTFIELDS ne sont pas corrects ?

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 63
    Points : 68
    Points
    68
    Par défaut Merci grunk
    grunk tu m'as bien aidé et je t'en remercie.

    Takago

Discussions similaires

  1. Envoyer une requête http au serveur
    Par soso78 dans le forum VBScript
    Réponses: 2
    Dernier message: 08/10/2008, 10h54
  2. [3.5] Générer une requête POST (ou GET) Côté serveur
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 11
    Dernier message: 09/04/2008, 12h08
  3. Requête POST coté serveur
    Par bambou dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2007, 17h58
  4. [XML] Créer un fichier sur le serveur avec le contenu d'une requête POST
    Par kingmandrax dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 27/10/2006, 00h18
  5. [AJAX] Retrouver xml envoyé du client au serveur (via méthode POST)
    Par leszek dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/05/2006, 16h07

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