Page 1 sur 1

Requete curl post et mosquitto

Posté : 09 janv. 2021, 20:18
par olistaps
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

Re: Requete curl post et mosquitto

Posté : 09 janv. 2021, 20:44
par or 1
il faut lire et comprendre les messages d'erreur, avec l'aide de google si nécessaire.
et nous donner ce message d'erreur.

Re: Requete curl post et mosquitto

Posté : 09 janv. 2021, 20:50
par olistaps
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

Re: Requete curl post et mosquitto

Posté : 09 janv. 2021, 20:56
par or 1
un tel site ne peut que bloquer une telle fonction.
il faut donc tester en local ou sur un vrai hébergeur.

Re: Requete curl post et mosquitto

Posté : 09 janv. 2021, 22:45
par olistaps
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

Re: Requete curl post et mosquitto

Posté : 11 janv. 2021, 01:18
par olistaps
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 ?