Leia direto da fonte: http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl
Me perguntaram outro dia: como enviar uma requisição POST usando PHP com dados JSON corretamente formatados? Recorri aos slides do meu tutorial de web services para a resposta, e pensei em colocar aqui com algumas explicações. Afinal, publicar seus slides é algo bom, mas sem o tutorial de fato, acho que eles raramente são úteis.
Não podemos enviar campos POST, porque queremos enviar JSON, e não simular um formulário (o mérito de uma API que aceita requisições POST com dados em formato de formulário é um debate interessante). Ao invés disto, nós criamos o JSON, o definimos como corpo da requisição POST e definimos os cabeçalhos corretamente para que o servidor que receba a requisição possa entender o que enviamos.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$data = array("name" => "Hagrid", "age" => "36"); $data_string = json_encode($data); $ch = curl_init('http://api.local/rest/users'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($ch); |
Todas estas definições estão bem explicadas na página curl_setopt(), mas basicamente a idéia é definir a requisição para que seja um POST, fazer com que os dados codificados em JSON sejam o corpo da requisição e definir os cabeçalhos corretos para descrever o corpo da requisição. O CURLOPT_RETURNTRANSFER
é puramente para que a resposta do servidor remoto seja colocada em $result
, ao invés de “ecoado”. Se você precisa enviar dados JSON com PHP, espero que isto ajude!
Autoria: lornajane@lornajane.net, @lornajane
Valeu Cara me ajudou muito com seu tutorial,
Obrigado!!!