Requete curl post et mosquitto

Petit nouveau ! | 4 Messages

09 janv. 2021, 20:18

Bonjour à tous,
Merci de passer sur mon sujet et si vous avez un peu de temps pour m'aider, m'aiguiller dans mes recherches mille mercis.
Mon objectif est que la réponse http via curl, soit mise en forme puis envoyer à mon broker (mosquitto).
Tout de suite je passe la mise en forme que j'ai réussi à faire mais ma requete curl en php ne fonctionne pas

Ma rêquete curl :
curl -d "access_token=XXX&language=fr_FR&userId=XXX&checkcode=XXX" -H "Content-Type: application/x-www-form-urlencoded" -X POST "XXX"
donne :
{"code":1,"data":{"XXX":{"duration":"7","total":"10.752255","month":"1.168628","year":"1.168628","today":"0.180580","co2":"7.906070","tree":"0.395303","power":"13.000000","type":0,"capacity":"2.18"}},"message":"Réussir"}

J'ai tenté de faire cela en php
<?php
$data = array(
'access_token' => 'XXX',
'language' => 'fr_FR',
'userId' => 'XXX',
'checkcode' => 'XXX');

$curls = curl_init();
curl_setopt($curls, CURLOPT_URL, 'XXX');
curl_setopt($curls, CURLOPT_POST, true);
curl_setopt($curls, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curls, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$reponse = curl_exec($curls);
curl_close($curls);
echo $reponse;
?>
Et là c'est le drame... fatal error à la ligne $curls = curl_init(); et je ne comprends pas ...

Après la mise en forme de la réponse, j'ai trouvé comme faire
Enfin, peux ton lancer la commande ci dessous en php avec la variable $reponse comme cela ? :

mosquitto_pub -h localhost -t aps -m $reponse

Merci encore
Modifié en dernier par olistaps le 09 janv. 2021, 22:56, modifié 1 fois.

Mammouth du PHP | 2703 Messages

09 janv. 2021, 20:44

il faut lire et comprendre les messages d'erreur, avec l'aide de google si nécessaire.
et nous donner ce message d'erreur.

Petit nouveau ! | 4 Messages

09 janv. 2021, 20:50

Un oubli c'est clair de mettre l'erreur... (j'ai testé mon code dans phptester)
FATAL ERROR syntax error, unexpected ')' on line number 8
Merci

Mammouth du PHP | 2703 Messages

09 janv. 2021, 20:56

un tel site ne peut que bloquer une telle fonction.
il faut donc tester en local ou sur un vrai hébergeur.

Petit nouveau ! | 4 Messages

09 janv. 2021, 22:45

Bon et bien en faites le code....fonctionne (je suis vert d'avoir zappé cela, en tout cas merci beaucoup)

J'avais oublié plusieurs choses dans ma mise en forme
la réponse est :
{"code":1,"data":{"XXX":{"duration":"7","total":"10.752255","month":"1.168628","year":"1.168628","today":"0.180580","co2":"7.906070","tree":"0.395303","power":"13.000000","type":0,"capacity":"2.18"}},"message":"Réussir"}

et il me faudrait raccourcir ça c'est ok mais l'ajout des backlashing ne fonctionne pas pour au final donner cela :
{\"duration\":"10",\"total\":"12.197575",\"month\":"2.613948",\"year\":"2.613948",\"today\":"0.932200",\"co2\":"8.968805",\"tree\":"0.448440",\"power\":"10.000000",\"type\":0,\"capacity\":"2.18"}

J'ai fait cela ci dessous
Impossible d'ajouter un backlash en 2eme position et avant " autrement le reste est ok

<?php
$response = '{"code":1,"data":{"0b284800766b17bb0176a4ba048b64a2":{"duration":"10","total":"12.197575","month":"2.613948","year":"2.613948","today":"0.932200","co2":"8.968805","tree":"0.448440","power":"10.000000","type":0,"capacity":"2.18"}},"message":"Réussir"}';
$response = substr($response,53);
$response = substr($response,0,-23);
$response = substr_replace($response,'\\\\',1,0); => cela met deux \\ impossible 1 uniquement
$search = array("duration") ;
$replace = array("duration'\'");
$response1 = str_replace($search,$replace, $response);
$search = array("total") ;
$replace = array("total'\'");
$response2 = str_replace($search,$replace, $response1);
$search = array("month") ;
$replace = array("month'\'");
$response3 = str_replace($search,$replace, $response2);
$search = array("year") ;
$replace = array("year'\'");
$response4 = str_replace($search,$replace, $response3);
$search = array("today") ;
$replace = array("today'\'");
$response5 = str_replace($search,$replace, $response4);
$search = array("co2") ;
$replace = array("co2'\'");
$response6 = str_replace($search,$replace, $response5);
$search = array("tree") ;
$replace = array("tree'\'");
$response7 = str_replace($search,$replace, $response6);
$search = array("power") ;
$replace = array("power'\'");
$response8 = str_replace($search,$replace, $response7);
$search = array("type") ;
$replace = array("type'\'");
$response9 = str_replace($search,$replace, $response8);
$search = array("capacity") ;
$replace = array("capacity'\'");
$response10 = str_replace($search,$replace, $response9);
$response2 = str_replace("'","", $response10);
echo $response2;
?>

enfin puis directement utiliser cette commande dans une page php ou dois je passer autrement ?
mosquitto_pub -h localhost -t aps -m $response2

merci merci

Petit nouveau ! | 4 Messages

11 janv. 2021, 01:18

J'ai réussi à mettre en forme mon message mais impossible de bien publier avec mosquitto php...avec les bons arguments (bref je trouve pas et j'ai déjà plus trop de cheveux...)

Avec le mode bisounours activé comme la commande mosquitto dans le terminal fonctionne nickel je suis en train de chercher un truc comme cela
/// $response2 étant la variable mise en forme ;
$output = shell_exec('mosquitto_pub -h localhost -t aps -m $response2');
echo "<pre>$output</pre>";
Cela semble exister ?