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;
  }
 ?>