Je suis à la recherche d’aide pour un projet qui nécessite l’exécution d’une requête XHR Post.
J’ai créé un script PHP (voir plus bas) qui a pour objectif d’exécuter une requête vers un site web, celui-ci marche parfaitement quand je le charge dans un navigateur web, mais je n’arrive pas à l’exécuter depuis Jeedom.
Je pensais pouvoir utiliser le plugin Script, mais que je tente une requête en info ou action script, HTML idem HTTP, cela ne fonctionne malheureusement pas…
Mon objectif est de pouvoir exécuter cette requête XHR Post depuis Jeedom (initié via un scenario), quelqu’un aurait une idée ?
Mille merci par avance pour votre aide !
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$latitude = "xxx";
$longitude = "xxx";
$userId = artem;
// Création du timestart
$timestart = round(microtime(true) * 1000);
?>
<script>
const proxyUrl = 'URL';
// Données à envoyer dans la requête POST
const data = 'data={ "latitude":"<?php echo strval($latitude); ?>", "longitude": "<?php echo strval($longitude); ?>", "precision": "10", "timestart": "<?php echo strval($timestart); ?>", "test": "0", "IdUser": "<?php echo strval($userId); ?>", "offsetTemps": "-120" }';
const xhr = new XMLHttpRequest();
xhr.open("POST", proxyUrl, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = function() {
if (xhr.status === 200) {
console.log("Réponse du serveur distant :", xhr.responseText);
} else {
console.error("Erreur lors de la requête. Statut :", xhr.status);
}
};
xhr.send(data);
</script>
Non, c’est du javascript donc ca ne s’executera pas par php lors de l’execution du script coté serveur.
Pourquoi faire cela en javascript? ca n’a pas d’interêt; faites la requete en php
Dans ce cas, tu peux tenter en NodeJS c’est très proche du javascript - en fait c’est du javascript - et Node est en principe installé sur toutes les box Jeedom, de nombreux plugins l’utilisent.
Merci à tous pour votre aide, je viens de faire la modification en PHP.
J’ai fait travailler une IA et la fin donne maintenant :
// Données à envoyer dans la requête POST
$data = array(
"latitude" => $latitude,
"longitude" => $longitude,
"precision" => "10",
"timestart" => $timestart,
"test" => "0",
"IdUser" => $userId,
"offsetTemps" => "-120"
);
// URL du serveur proxy
$proxyUrl = 'URL'; // Remplacez par l'URL de votre serveur proxy
$dataString = json_encode($data);
//$dataString = json_encode($data, JSON_PRETTY_PRINT); // Utilisation de JSON_PRETTY_PRINT
$ch = curl_init($proxyUrl);
echo "Vérification 1 :<br>";
print_r($data); // Correction ici
echo "<br>Vérification 2 :<br>";
echo $dataString;
echo "<br>";
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response !== false) {
echo "Réponse du serveur distant : " . $response;
} else {
echo "Erreur lors de la requête cURL : " . curl_error($ch);
}
curl_close($ch);
Je n’ai jamais utilisé la fonction CURL, quand je regarde l’inspecteur de mon navigateur. Je ne vois pas de requête post, celle-ci s’exécute côté serveur ? Un moyen de s’assurer du contenu de la requête émise (en dehors de voir ce qui arrive sur le serveur distant) ?
Tu ne verra rien dans l’inspecteur du navigateur, mais tu verra le résultat de ta requête directement dans le navigateur (print_r $data ou bien echo $dataString ça permet d’afficher la requête)
Car en effet PHP est exécuté sur le serveur, pas sur ton navigateur.