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

Format d'échange (XML, JSON...) Java Discussion :

Envoyer des données depuis un programme java vers une page PHP


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut Envoyer des données depuis un programme java vers une page PHP
    Bonjour,

    Depuis ce matin, je tente, j'expérimente une solution pour avoir un programme java qui envoit des données via JSON vers une page PHP.
    A terme la page PHP enregistrera les données reçu dans une base de données.

    Le problème que j'ai, c'est que la page php est bien contactée par le programme java, mais aucune données valide.
    J'ai comme valeur du headers et de la variable $_POST : 1


    Donc, je sèche un peu , est-ce un problème côté java ou du côté de la page PHP ou du serveur web ?


    Mon code java (largerement inspiré des samples du site apache httpclient)

    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
     
    public String postData() throws JSONException
    	{  
    	// Create a new HttpClient and Post Header
     
    	// HttpClient httpclient = new DefaultHttpClient();
    	// https://stackoverflow.com/questions/24788521/why-i-am-getting-defaulthttpclient-is-deprecated
            // https://hc.apache.org/httpcomponents-client-5.3.x/quickstart.html
     
    	String result = "";
     
    	// form parameters.
         List<NameValuePair> nvps = new ArrayList<NameValuePair>();
         nvps.add(new BasicNameValuePair("table", "TBLBascule_robot"));
         nvps.add(new BasicNameValuePair("host", "goe"));
         nvps.add(new BasicNameValuePair("alive", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"))));
     
         try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
     
          System.out.println("Create the POST");	 
           ClassicHttpRequest httpPost = ClassicRequestBuilder.post("http://<my web server>/dataProcessor/basculeweb.php")
                   .setEntity(new UrlEncodedFormEntity(nvps))
                   .build();
     
           System.out.println("Execute the POST");
           httpclient.execute(httpPost, response -> {
               System.out.println(response.getCode() + " " + response.getReasonPhrase());
               final HttpEntity entity2 = response.getEntity();
               // do something useful with the response body
               // and ensure it is fully consumed
               EntityUtils.consume(entity2);
               return null;
           });
           httpclient.close();
          } 
        catch (Exception e) 
           {
           e.printStackTrace();
           }
        return result;
    	}
    Le code PHP
    Code inspiré d'un exemple trouvé sur internet.


    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
     
    include('DatabaseFunctions-bascule.php');
     
    /*$json = $_POST['jsonpost'];
    echo "JSON: \n";
    echo "--------------\n";
    var_dump($json);
    echo "\n\n";*/
     
    $headers = getallheaders();
     
    print_r($headers);
    error_log("Content of headers is : " . print_r($headers));
    error_log("Content of POST : " . print_r($_POST));
     
     
    $data = json_decode($headers['json']);
     
    //$data = json_decode($json);
    echo "Array: \n";
    echo "--------------\n";
    var_dump($data);
    echo "\n\n";
     
    $table = $data->tablename;
    echo "Result: \n";
    echo "--------------\n";
    echo "Table     : ".$table;
     
    switch($table)
      {
      case "TBLBascule_robot":
        $dbcon = connexion(LOGIN, PASSWORD, DB, HOST); 
        $hostname = $data->host;
        $alive = $data->alive;
     
        executeQuery("update ".$table." set host = '".$hostname."', alive='".$alive."'", $dbcon);
        $dbcon->close();
        break;
     
      default: break;
      }
     ?>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Hello,

    les deux côtés s'y prennent mal.

    Client : ton code Java n'envoie pas du JSON, mais un formulaire HTML classique.

    Il faut d'abord que tu construises le JSON avec une bibliothèque adaptée, que tu le sérialises en String, puis que tu envoies le tout comme une StringEntity, de préférence avec le content-type application/json.

    Tu peux tester ce que fait ton client avec un service en ligne qui te renvoie la requête que tu viens de lui faire.

    Serveur : il ne s'attend pas à trouver le JSON dans le corps du POST, mais dans un header, ce qui est une abomination.

    Je ne m'y connais pas en PHP et je n'ai aucune idée de ce que tu peux y faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    En refaisant une recherche, je suis tombé sur l'info qu'il me fallait (sans trop y croire), donc, j'ai adapté le code en utilisant JSONObject pour construire le bloc JSON et ensuite l'envoyer...


    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
     
    ... 
     JSONObject jo = new JSONObject();
         jo.put("table", "TBLBascule_robot");
         jo.put("host", "goe");
         jo.put("alive", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
     
     
         HttpEntity stringEntity = new StringEntity(jo.toString(), ContentType.APPLICATION_JSON);
     
         try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
     
          System.out.println("Create the POST");	 
           ClassicHttpRequest httpPost = ClassicRequestBuilder.post("http://<web serveur>/dataProcessor/basculeweb.php")
                   .setEntity(stringEntity)
                   .build();
     
           System.out.println("Execute the POST");
    ...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Voilà, très bien. Maintenant il faut aussi corriger le côté PHP.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    super...

    Pour avoir de l'aide côté PHP, faut-il que j'ouvre un post dans la section PHP où juste faire un lien vers ce post ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Pas sûr de comprendre la différence. Ce sera plus clair en expliquant ce que tu as besoin de faire avec PHP, mais ça devrait pas poser de problème de mentionner la présente discussion en rapport avec le client Java.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut IT's WORK
    Le côté PHP à été résolu...

    Merci pour l'aide..

  8. #8
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Juste une question, quel code me permet d'être sur que la donnée à été transféré ?
    Voir est-il possible de mettre un code retour ?

  9. #9
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Oui, c'est possible. C'est même pris en compte de base dans le protocole HTTP: https://developer.mozilla.org/en-US/...sful_responses

Discussions similaires

  1. Envoyer des données depuis mon application android vers mysql
    Par bennour.mohamed dans le forum Android
    Réponses: 9
    Dernier message: 18/07/2011, 14h42
  2. Réponses: 2
    Dernier message: 01/05/2009, 18h25
  3. Réponses: 9
    Dernier message: 04/06/2008, 11h38
  4. passer des arguments depuis un lien hypertxte vers une page php
    Par killer_instinct dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2007, 12h18
  5. Réponses: 1
    Dernier message: 29/08/2006, 17h03

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