Django PHP et Rest sont dans un bateau ... PUT
Hé non PUT n'est pas le début d'une injure ... mais comment faire une requête de type PUT en PHP quand on s'adresse à un service Rest fournis par Django ... oui là c'est de la technique, c'est du dev et comme j'ai passé quelques heures à me faire mal aux neurones à ce sujet je partage la solution.
Changer le quota d'un usager
<?php $url = "https://adresse_de_votre_modoboa/api/v1"; $crl = curl_init(); $headr = array(); $headr[] = 'Content-type: application/json'; $headr[] = 'Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //utilisation du Token généré sur l'interface d'administration de modoboa $data = array( "pk" => $id, "username" => "$login", "is_active" => true, "master_user" => false, "mailbox" => array( "full_address" => "$login", "use_domain_quota" => false, "quota" => $newquota ), "role" => "SimpleUsers" ); $data_string = json_encode($data); $headr[] = 'Content-length: ' . strlen($data_string); //important -> PUT $headr[] = 'X-HTTP-Method-Override: PUT'; curl_setopt($crl, CURLOPT_REFERER, $referer); curl_setopt($crl, CURLOPT_URL, $url . "/accounts/$id/"); curl_setopt($crl, CURLOPT_HTTPHEADER, $headrUpdate); curl_setopt($crl, CURLOPT_POSTFIELDS, $data_string); //surtout pas ... curl_setopt($crl, CURLOPT_PUT, true); curl_setopt($crl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); $rest = curl_exec($crl); if ($rest === false) { // throw new Exception('Curl error: ' . curl_error($crl)); print_r('Curl error: ' . curl_error($crl)); } curl_close($crl); print_r($rest); ?>
