Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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 habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    Par défaut

    Hello,
    il faut que tu utilise curl.

  3. #3
    Invité de passage
    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 : 0
    Points
    0

    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 habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    Par défaut

    regarde ca :
    http://fr2.php.net/manual/fr/ref.curl.php

    tu initialise:
    Code :
    1
    2
     
    $ch = curl_init();

    tu set les options que tu veux
    Code :
    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 :
    1
    2
     
    $content = curl_exec( $ch );
    tu récupère des informations sur la requête exécuté :
    Code :
    1
    2
     
    $response = curl_getinfo( $ch );
    tu récupère les erreurs si il y en a :
    Code :
    1
    2
    3
     
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    tu stop la connexion :
    Code :
    1
    2
     
    curl_close ( $ch );

  5. #5
    Invité de passage
    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 : 0
    Points
    0

    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 :
    1
    2
     
    $ch = curl_init();

    tu set les options que tu veux
    Code :
    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 :
    1
    2
     
    $content = curl_exec( $ch );
    tu récupère des informations sur la requête exécuté :
    Code :
    1
    2
     
    $response = curl_getinfo( $ch );
    tu récupère les erreurs si il y en a :
    Code :
    1
    2
    3
     
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    tu stop la connexion :
    Code :
    1
    2
     
    curl_close ( $ch );

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 030
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 030
    Points : 6 775
    Points
    6 775

    Par défaut

    Si il sagit simplement de faire une requête POST vers un autre serveur y'a pas besoin de CURL :

    Code :
    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

  7. #7
    Membre habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    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
    Invité de passage
    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 : 0
    Points
    0

    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 habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    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
    Invité de passage
    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 : 0
    Points
    0

    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 habitué Avatar de John Blobsmith
    Inscrit en
    avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : avril 2004
    Messages : 148
    Points : 136
    Points
    136

    Par défaut

    Hello, j'ai testé ça sur google.fr, ça fonctionne bien, faut juste enlever les options pour le POST.
    Code :
    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 ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •