{"id":37131,"date":"2025-02-04T18:24:16","date_gmt":"2025-02-04T21:24:16","guid":{"rendered":"https:\/\/www.locaweb.com.br\/ajuda\/?post_type=ht_kb&#038;p=37131"},"modified":"2025-02-17T13:45:17","modified_gmt":"2025-02-17T16:45:17","slug":"curl-php-post","status":"publish","type":"ht_kb","link":"https:\/\/www.locaweb.com.br\/ajuda\/wiki\/curl-php-post\/","title":{"rendered":"Como enviar dados por cURL (POST) em PHP?"},"content":{"rendered":"<p>Enviar dados por <strong>cURL em PHP<\/strong> \u00e9 uma t\u00e9cnica comum para interagir com APIs ou enviar informa\u00e7\u00f5es a um servidor externo. Com o m\u00e9todo POST, voc\u00ea pode enviar dados como arrays ou at\u00e9 mesmo no formato JSON.<\/p>\n<p>Neste tutorial, vamos mostrar como configurar o ambiente PHP para usar cURL, realizar uma requisi\u00e7\u00e3o POST e como tratar a resposta do servidor de forma eficaz.<\/p>\n<h2>Passo a passo para enviar dados com cURL com POST<\/h2>\n<h3>Passo 1: configurar o ambiente PHP<\/h3>\n<p>Antes de enviar dados com cURL em <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/php\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHP<\/a>, \u00e9 importante verificar se a extens\u00e3o cURL est\u00e1 habilitada no ambiente PHP. A maioria das instala\u00e7\u00f5es j\u00e1 inclui cURL por padr\u00e3o, mas voc\u00ea pode confirmar com o seguinte c\u00f3digo:<\/p>\n<p>&nbsp;<\/p>\n<p>Caso o cURL n\u00e3o esteja habilitado, <strong>voc\u00ea precisar\u00e1 ativ\u00e1-lo no arquivo php.ini da sua instala\u00e7\u00e3o do PHP<\/strong>. Procure pela linha <em>extension=curl<\/em> e remova o ponto e v\u00edrgula (;) no in\u00edcio, caso ele esteja l\u00e1. Em seguida, reinicie o servidor web para que a altera\u00e7\u00e3o tenha efeito.<\/p>\n<h3>Passo 2: iniciar o recurso cURL<\/h3>\n<p>Agora que o ambiente PHP est\u00e1 pronto, vamos iniciar o cURL no c\u00f3digo. Para fazer isso, usamos a fun\u00e7\u00e3o<em> curl_init()<\/em>, que cria uma nova sess\u00e3o cURL. Ela retorna um identificador de recurso cURL que ser\u00e1 usado nas chamadas seguintes.<\/p>\n<p>&nbsp;<\/p>\n<p>Esse identificador de recurso <em>$ch<\/em> <strong>ser\u00e1<\/strong><strong> usado em todos os outros comandos cURL que voc\u00ea executar<\/strong>.<\/p>\n<h3>Passo 3: definir URL e par\u00e2metros de envio<\/h3>\n<p>Com o recurso cURL iniciado, o pr\u00f3ximo passo \u00e9 configurar a URL para a qual voc\u00ea deseja enviar os dados. Al\u00e9m disso, vamos configurar os par\u00e2metros de envio (que no caso de um POST incluem os dados que voc\u00ea deseja enviar).<\/p>\n<p>&nbsp;<\/p>\n<p>Agora, vamos passar esses dados para o cURL. Para fazer isso, usamos as op\u00e7\u00f5es <em>CURLOPT_URL,<\/em> para definir a URL, e <em>CURLOPT_POST<\/em> e a requisi\u00e7\u00e3o ser\u00e1 do tipo POST.<\/p>\n<h4>Como configurar CURLOPT_POST e CURLOPT_POSTFIELDS<\/h4>\n<p><em>CURLOPT_POST<\/em> \u00e9 uma op\u00e7\u00e3o que define se a requisi\u00e7\u00e3o ser\u00e1 POST (valor true ou 1). J\u00e1 <em>CURLOPT_POSTFIELDS<\/em> permite enviar os dados como um array ou string.<\/p>\n<p>&nbsp;<\/p>\n<h4>Exemplo de envio de dados em JSON<\/h4>\n<p>Se voc\u00ea precisar enviar os dados em formato JSON, basta alterar o formato dos dados e definir o cabe\u00e7alho <em>Content-Type<\/em> como <em>application\/json<\/em>:<\/p>\n<p>&nbsp;<\/p>\n<p>Nesse exemplo, enviamos os dados como JSON. A op\u00e7\u00e3o <em>CURLOPT_HTTPHEADER<\/em> \u00e9 usada para <strong>definir o cabe\u00e7alho de conte\u00fado como JSON<\/strong> e enviar o comprimento do corpo da requisi\u00e7\u00e3o.<\/p>\n<h3>Passo 4: executar a requisi\u00e7\u00e3o e fechar o recurso<\/h3>\n<p>Agora que configuramos todos os par\u00e2metros, podemos executar a requisi\u00e7\u00e3o com a fun\u00e7\u00e3o <em>curl_exec()<\/em>, que envia a requisi\u00e7\u00e3o HTTP para o servidor.<\/p>\n<p>&nbsp;<\/p>\n<p>Aqui, usamos <em>curl_exec($ch)<\/em> para enviar a requisi\u00e7\u00e3o e armazenar a resposta na vari\u00e1vel <em>$response<\/em>.<\/p>\n<p>Se houver algum erro durante a requisi\u00e7\u00e3o, <em>curl_errno<\/em><em>($ch)<\/em> ser\u00e1 verdadeiro, e voc\u00ea pode exibir a mensagem de erro com <em>curl_error($ch)<\/em>.<\/p>\n<p>Finalmente, fechamos a sess\u00e3o com <em>curl_close<\/em><em>($ch)<\/em>.<\/p>\n<h3>Passo 5: tratar a resposta da requisi\u00e7\u00e3o<\/h3>\n<p>A resposta do servidor ser\u00e1 armazenada na vari\u00e1vel <em>$response<\/em>. Agora, voc\u00ea pode trat\u00e1-la de acordo com o formato da resposta esperada. Se a resposta for em JSON, por exemplo, podemos decodific\u00e1-la com <em>json_decode()<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<p>No exemplo acima, a resposta \u00e9 decodificada para um array PHP e podemos acessar os valores como qualquer outro array. Lembre-se de verificar o formato de resposta que o servidor retorna para saber como trat\u00e1-la.<\/p>\n<h2>Exemplos pr\u00e1ticos<\/h2>\n<p>Vamos ver alguns exemplos pr\u00e1ticos de aplica\u00e7\u00e3o?<\/p>\n<h3>Enviar dados em JSON para uma API<\/h3>\n<p>No exemplo abaixo, vamos enviar dados para uma API em formato JSON. As APIs modernas, geralmente, utilizam o formato JSON para troca de dados, ent\u00e3o, \u00e9 essencial saber como envi\u00e1-los corretamente com o cURL em PHP.<\/p>\n<p>Vamos criar um exemplo de envio de informa\u00e7\u00f5es de um usu\u00e1rio para uma API fict\u00edcia.<\/p>\n<h4>Passos para envio de dados em JSON<\/h4>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li><strong>Dados a serem enviados<\/strong>: primeiro, criamos um array com as informa\u00e7\u00f5es do usu\u00e1rio;<\/li>\n<li><strong>Convers\u00e3o para JSON<\/strong>: usamos a fun\u00e7\u00e3o<em> json_encode()<\/em> para converter o array em formato JSON;<\/li>\n<li><strong>Configura\u00e7\u00e3o do cURL<\/strong>: precisamos definir o cabe\u00e7alho HTTP para indicar que enviamos dados JSON;<\/li>\n<li><strong>Execu\u00e7\u00e3o da requisi\u00e7\u00e3o<\/strong>: enviamos a requisi\u00e7\u00e3o com o cURL e tratamos a resposta.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>Aqui est\u00e1 o c\u00f3digo completo:<\/p>\n<pre><i><span style=\"font-weight: 400;\">&lt;?php<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ URL da API para onde os dados ser\u00e3o enviados<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$url = 'https:\/\/api.exemplo.com\/usuarios';<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Dados do usu\u00e1rio a serem enviados<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$data = array(<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'nome' =&gt; 'Maria Silva',<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'maria@example.com',<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'idade' =&gt; 28<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Converte os dados para JSON<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$jsonData = json_encode($data);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Inicia a sess\u00e3o cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$ch = curl_init();<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Configura\u00e7\u00f5es do cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_URL, $url); \/\/ Define a URL da API<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_POST, true); \/\/ Define o m\u00e9todo POST<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); \/\/ Envia os dados JSON<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'Content-Type: application\/json', \/\/ Define o tipo de conte\u00fado como JSON<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'Content-Length: ' . strlen($jsonData) \/\/ Define o comprimento dos dados<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">));<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Executa a requisi\u00e7\u00e3o e armazena a resposta<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$response = curl_exec($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Verifica se houve erro na requisi\u00e7\u00e3o<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">if(curl_errno($ch)) {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0echo 'Erro cURL: ' . curl_error($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">} else {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\/\/ Exibe a resposta da API<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0echo 'Resposta da API: ' . $response;<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">}<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Fecha a sess\u00e3o cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_close($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">?&gt;<\/span><\/i><\/pre>\n<p>Nesse exemplo, os dados s\u00e3o enviados como JSON para a URL especificada.<\/p>\n<p>O cabe\u00e7alho <em>Content-Type: application\/json<\/em> informa ao servidor que os dados est\u00e3o no formato JSON. A fun\u00e7\u00e3o <em>curl_exec()<\/em> envia a requisi\u00e7\u00e3o e, se n\u00e3o houver erros, a resposta ser\u00e1 exibida.<\/p>\n<h3>Exemplo com manipula\u00e7\u00e3o de vari\u00e1veis de resposta<\/h3>\n<p>Agora, vamos ver como tratar a resposta que recebemos da API. Muitas vezes, as APIs retornam dados em formato JSON e <strong>\u00e9 necess\u00e1rio manipular esses dados<\/strong> para utiliz\u00e1-los em sua aplica\u00e7\u00e3o.<\/p>\n<h4>Passos para manipula\u00e7\u00e3o da resposta<\/h4>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li><strong>Decodificar a resposta JSON<\/strong>: ap\u00f3s receber a resposta da API, precisamos decodific\u00e1-la com<em> json_decode() <\/em>para transformar o JSON em um array ou objeto PHP;<\/li>\n<li><strong>Acessar os dados<\/strong>: uma vez decodificado, podemos acessar os dados de forma simples e manipul\u00e1-los como necess\u00e1rio.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>Veja o exemplo de c\u00f3digo com manipula\u00e7\u00e3o de vari\u00e1veis de resposta:<\/p>\n<pre><i><span style=\"font-weight: 400;\">&lt;?php<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ URL da API<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$url = 'https:\/\/api.exemplo.com\/usuarios';<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Dados a serem enviados (em JSON, como mostrado antes)<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$data = array(<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'nome' =&gt; 'Carlos Souza',<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'carlos@example.com',<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'idade' =&gt; 34<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Converte os dados para JSON<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$jsonData = json_encode($data);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Inicia a sess\u00e3o cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$ch = curl_init();<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Configura\u00e7\u00f5es do cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_URL, $url);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_POST, true);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'Content-Type: application\/json',<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0'Content-Length: ' . strlen($jsonData)<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">));<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Executa a requisi\u00e7\u00e3o<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">$response = curl_exec($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Verifica se houve erro<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">if(curl_errno($ch)) {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0echo 'Erro cURL: ' . curl_error($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">} else {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\/\/ Decodifica a resposta JSON<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0$responseData = json_decode($response, true);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\/\/ Acessa os dados da resposta<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0if (isset($responseData['status']) &amp;&amp; $responseData['status'] == 'sucesso') {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'Usu\u00e1rio cadastrado com sucesso!';<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'ID do usu\u00e1rio: ' . $responseData['id'];<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0} else {<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'Erro no cadastro: ' . $responseData['mensagem'];<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">}<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">\/\/ Fecha a sess\u00e3o cURL<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">curl_close($ch);<\/span><\/i>\r\n\r\n<i><span style=\"font-weight: 400;\">?&gt;<\/span><\/i><\/pre>\n<p>Nesse exemplo, ap\u00f3s enviar os dados, a resposta da API \u00e9 recebida e decodificada com <em>json_decode()<\/em>. O c\u00f3digo <strong>verifica se o status da resposta \u00e9 &#8220;sucesso&#8221;<\/strong> e, em caso afirmativo, exibe o ID do usu\u00e1rio cadastrado. Caso contr\u00e1rio, ele exibe uma mensagem de erro.<\/p>\n<p>A manipula\u00e7\u00e3o da resposta depende do formato e dos campos retornados pela API, e \u00e9 fundamental entender a estrutura do JSON para poder extrair e processar as informa\u00e7\u00f5es corretamente.<\/p>\n<h2>Erros comuns ao utilizar cURL em PHP<\/h2>\n<p>O uso de cURL em PHP \u00e9 bastante comum para interagir com APIs e servi\u00e7os externos, mas \u00e9 poss\u00edvel se deparar com alguns erros. A seguir, discutimos alguns dos erros mais comuns ao utilizar cURL e como resolv\u00ea-los.<\/p>\n<h3>Como resolver problemas de conex\u00e3o e autentica\u00e7\u00e3o?<\/h3>\n<p>Problemas de conex\u00e3o e autentica\u00e7\u00e3o s\u00e3o bastante comuns quando se trabalha com cURL em PHP. Veremos, abaixo, as solu\u00e7\u00f5es para esses problemas.<\/p>\n<h4>Erro de conex\u00e3o<\/h4>\n<p>Um erro de conex\u00e3o ocorre quando o PHP n\u00e3o consegue se conectar ao servidor ou servi\u00e7o de destino. Isso pode ser causado por uma <strong>URL incorreta, problemas na rede ou no servidor de destino<\/strong>.<\/p>\n<p><strong>Solu\u00e7\u00e3o:<\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Verifique se a URL est\u00e1 correta, o que inclui o protocolo (http:\/\/ ou https:\/\/);<\/li>\n<li>Certifique-se de que o servidor de destino est\u00e1 online e acess\u00edvel;<\/li>\n<li>Se voc\u00ea usar https, verifique se o servidor tem um certificado SSL v\u00e1lido;<\/li>\n<li>Para depurar problemas de conex\u00e3o, voc\u00ea pode ativar as op\u00e7\u00f5es de cURL para exibir detalhes da requisi\u00e7\u00e3o:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><em>curl_setopt($ch, CURLOPT_VERBOSE, true);<\/em><\/pre>\n<h4>Problemas de autentica\u00e7\u00e3o<\/h4>\n<p>Se a API exigir autentica\u00e7\u00e3o (b\u00e1sica ou por token), \u00e9 necess\u00e1rio configurar corretamente os headers de autentica\u00e7\u00e3o. Caso contr\u00e1rio, a requisi\u00e7\u00e3o falhar\u00e1 com um <strong>erro 401<\/strong> (n\u00e3o autorizado).<\/p>\n<p><strong>Solu\u00e7\u00e3o: <\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Para autentica\u00e7\u00e3o b\u00e1sica, use o seguinte c\u00f3digo:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><em>curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/em>\r\n\r\n<em> 'Authorization: Basic ' . base64_encode('usuario:senha')<\/em>\r\n\r\n<em>));<\/em><\/pre>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Para autentica\u00e7\u00e3o com token de API, voc\u00ea pode usar o seguinte header:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><em>curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/em>\r\n\r\n<em> 'Authorization: Bearer SEU_TOKEN_AQUI'<\/em>\r\n\r\n<em>));<\/em><\/pre>\n<h4>Erros de DNS<\/h4>\n<p>Se o cURL n\u00e3o conseguir resolver o nome de dom\u00ednio da URL fornecida, isso pode ser causado por <strong>problemas no servidor DNS ou configura\u00e7\u00e3o incorreta da URL<\/strong>.<\/p>\n<p><strong>Solu\u00e7\u00e3o:<\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Verifique a URL para garantir que o dom\u00ednio est\u00e1 correto e acess\u00edvel;<\/li>\n<li>Certifique-se de que o servidor onde o PHP \u00e9 executado tem acesso \u00e0 internet e servidores DNS corretamente configurados.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Configura\u00e7\u00e3o de Headers HTTP e codifica\u00e7\u00e3o<\/h3>\n<p>Os headers HTTP s\u00e3o uma parte fundamental das requisi\u00e7\u00f5es e das respostas em uma API, especialmente quando se trata de enviar e receber dados. A seguir, veremos como configurar os headers corretamente e como trabalhar com diferentes tipos de codifica\u00e7\u00e3o.<\/p>\n<h4>Configura\u00e7\u00e3o de Headers HTTP<\/h4>\n<p>A configura\u00e7\u00e3o dos headers HTTP \u00e9 crucial quando voc\u00ea precisa <strong>especificar o tipo de dados que envia ou espera<\/strong>, como JSON ou XML.<\/p>\n<p>Al\u00e9m disso, voc\u00ea pode precisar <strong>adicionar cabe\u00e7alhos personalizados<\/strong> para autentica\u00e7\u00e3o ou controle de cache.<\/p>\n<p>Exemplo de configura\u00e7\u00e3o de headers:<\/p>\n<pre><em>curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/em>\r\n\r\n<em> 'Content-Type: application\/json', \/\/ Define o tipo de conte\u00fado como JSON<\/em>\r\n\r\n<em> 'Accept: application\/json', \/\/ Define que a resposta esperada \u00e9 JSON<\/em>\r\n\r\n<em> 'Authorization: Bearer SEU_TOKEN_AQUI' \/\/ Se necess\u00e1rio, adiciona o token de autentica\u00e7\u00e3o<\/em>\r\n\r\n<em>));<\/em><\/pre>\n<p>Nesse exemplo, configuramos o header <em>Content-Type<\/em> para informar que enviamos dados JSON e o header <em>Accept<\/em> para indicar que esperamos uma resposta tamb\u00e9m no formato JSON.<\/p>\n<h4>Codifica\u00e7\u00e3o de dados<\/h4>\n<p>Quando voc\u00ea envia dados para uma API, \u00e9 importante garantir que eles est\u00e3o <strong>corretamente codificados no formato esperado pelo servidor<\/strong>.<\/p>\n<p>No caso de dados JSON, por exemplo, \u00e9 fundamental usar a fun\u00e7\u00e3o<em> json_encode()<\/em> para converter um array PHP para o formato JSON.<\/p>\n<p>Se a API esperar dados em formato de formul\u00e1rio (como <em>application\/x-www-form-urlencoded<\/em>), voc\u00ea pode enviar os dados dessa maneira:<\/p>\n<pre><em>$data = array(<\/em>\r\n\r\n<em> 'nome' =&gt; 'Jo\u00e3o',<\/em>\r\n\r\n<em> 'email' =&gt; 'joao@example.com'<\/em>\r\n\r\n<em>);<\/em>\r\n\r\n<em>\/\/ Envia dados como formul\u00e1rio<\/em>\r\n\r\n<em>curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/em>\r\n\r\n<em> 'Content-Type: application\/x-www-form-urlencoded'<\/em>\r\n\r\n<em>));<\/em>\r\n\r\n<em>curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); \/\/ Codifica os dados para o formato de formul\u00e1rio<\/em><\/pre>\n<p>Isso codifica os dados em um <strong>formato de formul\u00e1rio<\/strong> e envia-os para a API de acordo com o que ela espera.<\/p>\n<h4>Codifica\u00e7\u00e3o de caracteres<\/h4>\n<p>Se voc\u00ea lida com caracteres especiais ou acentua\u00e7\u00e3o (como \u00e9 comum em textos em portugu\u00eas), \u00e9 importante garantir que a codifica\u00e7\u00e3o esteja correta.<\/p>\n<p><strong>Solu\u00e7\u00e3o:<\/strong><\/p>\n<p>Certifique-se de que o conte\u00fado enviado esteja na codifica\u00e7\u00e3o correta, geralmente <strong>UTF-8<\/strong>. Para isso, voc\u00ea pode definir o encoding nos headers da sua requisi\u00e7\u00e3o:<\/p>\n<pre><em>curl_setopt($ch, CURLOPT_HTTPHEADER, array(<\/em>\r\n\r\n<em> 'Content-Type: application\/json; charset=UTF-8'<\/em>\r\n\r\n<em>));<\/em><\/pre>\n<p>Isso assegura que os caracteres especiais sejam<strong> interpretados corretamente pelo servidor e pela aplica\u00e7\u00e3o<\/strong>.<\/p>\n<h2>O que \u00e9 cURL e para que serve?<\/h2>\n    \t\t<div class=\"hts-toggle  \"  >\r\n    \t\t\t<div class=\"hts-toggle__title\">Clique aqui: <em>O que \u00e9 cURL e para que serve?<\/em><\/div>\r\n    \t\t\t<div class=\"hts-toggle__content\">\r\n    \t\t\t\t<div class=\"hts-toggle__contentwrap\">\r\n    \t\t\t\t\t<\/p>\n<p>O cURL (Client URL) \u00e9 uma <strong>ferramenta e biblioteca que permite que programas se comuniquem com outros servidores<\/strong>, por meio de diversos protocolos de rede, como HTTP, HTTPS, FTP, entre outros.<\/p>\n<p>No PHP, o cURL \u00e9 utilizado para fazer <strong>requisi\u00e7\u00f5es a APIs, enviar dados e obter respostas de servidores remotos<\/strong>.<\/p>\n<p>\u00c9 muito \u00fatil em situa\u00e7\u00f5es como integra\u00e7\u00e3o com sistemas de pagamento, servi\u00e7os de terceiros e at\u00e9 em processos de <a href=\"https:\/\/www.locaweb.com.br\/hospedagem-de-sites-com-dominio-gratis\/\" target=\"_blank\" rel=\"noopener noreferrer\">hospedagem de sites<\/a>, quando \u00e9 necess\u00e1rio realizar chamadas a servidores externos para recuperar ou enviar informa\u00e7\u00f5es.<\/p>\n<p>\n    \t\t\t\t<\/div>\r\n    \t\t\t<\/div><!-- \/ht-toggle-content -->\r\n    \t\t<\/div>\r\n    \t\t\n<h2>Quando usar cURL em PHP?<\/h2>\n    \t\t<div class=\"hts-toggle  \"  >\r\n    \t\t\t<div class=\"hts-toggle__title\">Clique aqui: <em>Quando usar cURL em PHP?<\/em><\/div>\r\n    \t\t\t<div class=\"hts-toggle__content\">\r\n    \t\t\t\t<div class=\"hts-toggle__contentwrap\">\r\n    \t\t\t\t\t<\/p>\n<p>O cURL em PHP deve ser utilizado quando voc\u00ea<strong> precisa fazer requisi\u00e7\u00f5es HTTP ou interagir com APIs externas<\/strong>. Ele \u00e9 ideal para enviar dados via POST, obter respostas JSON ou XML ou at\u00e9 realizar integra\u00e7\u00f5es entre sistemas.<\/p>\n<p>Caso precise <strong>fazer login em sistemas remotos, enviar formul\u00e1rios ou verificar status de URLs<\/strong>, o cURL oferece uma maneira eficiente e robusta de lidar com esses processos.<\/p>\n<p>Ele tamb\u00e9m \u00e9 \u00fatil para tarefas como <strong>automatiza\u00e7\u00e3o de fluxos de trabalho e integra\u00e7\u00e3o entre plataformas<\/strong>.<\/p>\n<p>Gostou deste conte\u00fado? Aprofunde os seus conhecimentos com o nosso guia sobre a <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/evolucao-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">evolu\u00e7\u00e3o do PHP<\/a>.<\/p>\n<p>\n    \t\t\t\t<\/div>\r\n    \t\t\t<\/div><!-- \/ht-toggle-content -->\r\n    \t\t<\/div>\r\n    \t\t\n","protected":false},"excerpt":{"rendered":"<p>Enviar dados por cURL em PHP \u00e9 uma t\u00e9cnica comum para interagir com APIs ou enviar informa\u00e7\u00f5es a um servidor externo. Com o m\u00e9todo POST, voc\u00ea pode enviar dados como arrays ou at\u00e9 mesmo no formato JSON. Neste tutorial, vamos mostrar como configurar o ambiente PHP para usar cURL, realizar&#8230;<\/p>\n","protected":false},"author":50,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[119],"ht-kb-tag":[],"class_list":["post-37131","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-hospedagem-de-sites"],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/users\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/comments?post=37131"}],"version-history":[{"count":3,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37131\/revisions"}],"predecessor-version":[{"id":37169,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37131\/revisions\/37169"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/media?parent=37131"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-category?post=37131"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-tag?post=37131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}