Partage
  • Partager sur Facebook
  • Partager sur Twitter

$_POST vide apres une requete post vers API_REST

    8 juin 2021 à 14:55:40

    Le problème est : lorsque le front-end appelle l'api_rest avec fetch ou axios le back-end reçoit $_POST vide alors que lorsque nous avons utilisé postman pour tester la requête $_POST n'est pas vide nous pensons que le problème peut venir du serveur mais nous n'avons pas les compétences pour trouver le problème

    Avez-vous des solutions ?

    Code :

    js: 

    testPost(){
      axios.post('https://php.ballin.dev/api_rest.php', {
        test: 1
      })
        .then(response => console.log(response)).catch((error) => console.log(error))
        }

    PHP: 

    <?php
    
    header('Content-Type: application/json');
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: *");
    header('Access-Control-Allow-Methods: *');
    
    $result = var_dump($_POST);
    
       echo json_encode($result);
    ?>

    Merci pour votre temps et votre gentillesse


    • Partager sur Facebook
    • Partager sur Twitter
      9 juin 2021 à 16:03:56

      Bonjour des test que j'ai fait avec Postman et PHP quand cela ne fonctionne plus avec Javascript c'est à cause des en-tête de la requête qui sont différents, surtout au niveau de l'en-tête Content-Type qui déclare le contenue que la requête envoie peut être que PHP na pas reconnue celui que axios à définit par défaut.

      Avec l'API Fetch les en-tête ce passe en paramètre à la requête:

      fetch('https://php.ballin.dev/api_rest.php', {
      
      	method: 'POST',
          headers: {
          	'Content-Type': '<CONTENT_TYPE>'
          }
      })

      Avec axios il faut passé un object requestConfig en paramètre aussi je crois axios doc requestConfig

      Par défaut Postman définit un Content-Type avec la valeur:

      application/x-www-form-urlencoded

      Peut-être que Axios définit un Content-Type par défaut avec application/json et que PHP n'arrive pas à parsé automatiquement le JSON

      fetch('https://php.ballin.dev/api_rest.php', {
      
      	method: 'POST',
          headers: {
          	'Content-Type': 'application/x-www-form-urlencoded'
          }
      })





      -
      Edité par SamuelGaborieau3 9 juin 2021 à 16:05:38

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        9 juin 2021 à 22:57:51

        Effectivement, axios envoie un corps en JSON vu qu'on lui a passé un objet JSON comme second paramètre. Du côté PHP, on peut récupérer un corps JSON envoyé en POST en listant php://input de la sorte :

        <?php
        $body = json_decode(file_get_contents('php://input'));

        Faudra veiller à vérifier si le contenu est un objet JSON valide.

        • Partager sur Facebook
        • Partager sur Twitter
          10 juin 2021 à 20:13:04

          Merci pour vos réponses, 

          effectivement on ne peut pas récupérer directement le contenu JSON dans le $_POST 

          J'ai finalement trouver la solution pour mettre les variables dans $_POST quelques heures après ma question et cela est très proche de ta réponse Scroph

          PHP: 

          $input = file_get_contents('php://input');
          $_POST = json_decode($input, true);



          -
          Edité par AlexandreESTOR 10 juin 2021 à 20:13:59

          • Partager sur Facebook
          • Partager sur Twitter

          $_POST vide apres une requete post vers API_REST

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown