1. Home
  2. Hospedagem de Sites
  3. Como enviar dados por cURL (POST) em PHP?

Como enviar dados por cURL (POST) em PHP?

Enviar dados por cURL em PHP é uma técnica comum para interagir com APIs ou enviar informações a um servidor externo. Com o método POST, você pode enviar dados como arrays ou até mesmo no formato JSON.

Neste tutorial, vamos mostrar como configurar o ambiente PHP para usar cURL, realizar uma requisição POST e como tratar a resposta do servidor de forma eficaz.

Passo a passo para enviar dados com cURL com POST

Passo 1: configurar o ambiente PHP

Antes de enviar dados com cURL em PHP, é importante verificar se a extensão cURL está habilitada no ambiente PHP. A maioria das instalações já inclui cURL por padrão, mas você pode confirmar com o seguinte código:

 

Caso o cURL não esteja habilitado, você precisará ativá-lo no arquivo php.ini da sua instalação do PHP. Procure pela linha extension=curl e remova o ponto e vírgula (;) no início, caso ele esteja lá. Em seguida, reinicie o servidor web para que a alteração tenha efeito.

Passo 2: iniciar o recurso cURL

Agora que o ambiente PHP está pronto, vamos iniciar o cURL no código. Para fazer isso, usamos a função curl_init(), que cria uma nova sessão cURL. Ela retorna um identificador de recurso cURL que será usado nas chamadas seguintes.

 

Esse identificador de recurso $ch será usado em todos os outros comandos cURL que você executar.

Passo 3: definir URL e parâmetros de envio

Com o recurso cURL iniciado, o próximo passo é configurar a URL para a qual você deseja enviar os dados. Além disso, vamos configurar os parâmetros de envio (que no caso de um POST incluem os dados que você deseja enviar).

 

Agora, vamos passar esses dados para o cURL. Para fazer isso, usamos as opções CURLOPT_URL, para definir a URL, e CURLOPT_POST e a requisição será do tipo POST.

Como configurar CURLOPT_POST e CURLOPT_POSTFIELDS

CURLOPT_POST é uma opção que define se a requisição será POST (valor true ou 1). Já CURLOPT_POSTFIELDS permite enviar os dados como um array ou string.

 

Exemplo de envio de dados em JSON

Se você precisar enviar os dados em formato JSON, basta alterar o formato dos dados e definir o cabeçalho Content-Type como application/json:

 

Nesse exemplo, enviamos os dados como JSON. A opção CURLOPT_HTTPHEADER é usada para definir o cabeçalho de conteúdo como JSON e enviar o comprimento do corpo da requisição.

Passo 4: executar a requisição e fechar o recurso

Agora que configuramos todos os parâmetros, podemos executar a requisição com a função curl_exec(), que envia a requisição HTTP para o servidor.

 

Aqui, usamos curl_exec($ch) para enviar a requisição e armazenar a resposta na variável $response.

Se houver algum erro durante a requisição, curl_errno($ch) será verdadeiro, e você pode exibir a mensagem de erro com curl_error($ch).

Finalmente, fechamos a sessão com curl_close($ch).

Passo 5: tratar a resposta da requisição

A resposta do servidor será armazenada na variável $response. Agora, você pode tratá-la de acordo com o formato da resposta esperada. Se a resposta for em JSON, por exemplo, podemos decodificá-la com json_decode().

 

No exemplo acima, a resposta é 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á-la.

Exemplos práticos

Vamos ver alguns exemplos práticos de aplicação?

Enviar dados em JSON para uma API

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ão, é essencial saber como enviá-los corretamente com o cURL em PHP.

Vamos criar um exemplo de envio de informações de um usuário para uma API fictícia.

Passos para envio de dados em JSON

    1. Dados a serem enviados: primeiro, criamos um array com as informações do usuário;
    2. Conversão para JSON: usamos a função json_encode() para converter o array em formato JSON;
    3. Configuração do cURL: precisamos definir o cabeçalho HTTP para indicar que enviamos dados JSON;
    4. Execução da requisição: enviamos a requisição com o cURL e tratamos a resposta.

Aqui está o código completo:

 

Nesse exemplo, os dados são enviados como JSON para a URL especificada.

O cabeçalho Content-Type: application/json informa ao servidor que os dados estão no formato JSON. A função curl_exec() envia a requisição e, se não houver erros, a resposta será exibida.

Exemplo com manipulação de variáveis de resposta

Agora, vamos ver como tratar a resposta que recebemos da API. Muitas vezes, as APIs retornam dados em formato JSON e é necessário manipular esses dados para utilizá-los em sua aplicação.

Passos para manipulação da resposta

    1. Decodificar a resposta JSON: após receber a resposta da API, precisamos decodificá-la com json_decode() para transformar o JSON em um array ou objeto PHP;
    2. Acessar os dados: uma vez decodificado, podemos acessar os dados de forma simples e manipulá-los como necessário.

Veja o exemplo de código com manipulação de variáveis de resposta:

 

Nesse exemplo, após enviar os dados, a resposta da API é recebida e decodificada com json_decode(). O código verifica se o status da resposta é “sucesso” e, em caso afirmativo, exibe o ID do usuário cadastrado. Caso contrário, ele exibe uma mensagem de erro.

A manipulação da resposta depende do formato e dos campos retornados pela API, e é fundamental entender a estrutura do JSON para poder extrair e processar as informações corretamente.

Erros comuns ao utilizar cURL em PHP

O uso de cURL em PHP é bastante comum para interagir com APIs e serviços externos, mas é possível se deparar com alguns erros. A seguir, discutimos alguns dos erros mais comuns ao utilizar cURL e como resolvê-los.

Como resolver problemas de conexão e autenticação?

Problemas de conexão e autenticação são bastante comuns quando se trabalha com cURL em PHP. Veremos, abaixo, as soluções para esses problemas.

Erro de conexão

Um erro de conexão ocorre quando o PHP não consegue se conectar ao servidor ou serviço de destino. Isso pode ser causado por uma URL incorreta, problemas na rede ou no servidor de destino.

Solução:

    • Verifique se a URL está correta, o que inclui o protocolo (http:// ou https://);
    • Certifique-se de que o servidor de destino está online e acessível;
    • Se você usar https, verifique se o servidor tem um certificado SSL válido;
    • Para depurar problemas de conexão, você pode ativar as opções de cURL para exibir detalhes da requisição:
curl_setopt($ch, CURLOPT_VERBOSE, true);

Problemas de autenticação

Se a API exigir autenticação (básica ou por token), é necessário configurar corretamente os headers de autenticação. Caso contrário, a requisição falhará com um erro 401 (não autorizado).

Solução:

    • Para autenticação básica, use o seguinte código:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(

 'Authorization: Basic ' . base64_encode('usuario:senha')

));
    • Para autenticação com token de API, você pode usar o seguinte header:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(

 'Authorization: Bearer SEU_TOKEN_AQUI'

));

Erros de DNS

Se o cURL não conseguir resolver o nome de domínio da URL fornecida, isso pode ser causado por problemas no servidor DNS ou configuração incorreta da URL.

Solução:

    • Verifique a URL para garantir que o domínio está correto e acessível;
    • Certifique-se de que o servidor onde o PHP é executado tem acesso à internet e servidores DNS corretamente configurados.

Configuração de Headers HTTP e codificação

Os headers HTTP são uma parte fundamental das requisições 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ção.

Configuração de Headers HTTP

A configuração dos headers HTTP é crucial quando você precisa especificar o tipo de dados que envia ou espera, como JSON ou XML.

Além disso, você pode precisar adicionar cabeçalhos personalizados para autenticação ou controle de cache.

Exemplo de configuração de headers:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

 'Content-Type: application/json', // Define o tipo de conteúdo como JSON

 'Accept: application/json', // Define que a resposta esperada é JSON

 'Authorization: Bearer SEU_TOKEN_AQUI' // Se necessário, adiciona o token de autenticação

));

Nesse exemplo, configuramos o header Content-Type para informar que enviamos dados JSON e o header Accept para indicar que esperamos uma resposta também no formato JSON.

Codificação de dados

Quando você envia dados para uma API, é importante garantir que eles estão corretamente codificados no formato esperado pelo servidor.

No caso de dados JSON, por exemplo, é fundamental usar a função json_encode() para converter um array PHP para o formato JSON.

Se a API esperar dados em formato de formulário (como application/x-www-form-urlencoded), você pode enviar os dados dessa maneira:

$data = array(

 'nome' => 'João',

 'email' => 'joao@example.com'

);

// Envia dados como formulário

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

 'Content-Type: application/x-www-form-urlencoded'

));

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // Codifica os dados para o formato de formulário

Isso codifica os dados em um formato de formulário e envia-os para a API de acordo com o que ela espera.

Codificação de caracteres

Se você lida com caracteres especiais ou acentuação (como é comum em textos em português), é importante garantir que a codificação esteja correta.

Solução:

Certifique-se de que o conteúdo enviado esteja na codificação correta, geralmente UTF-8. Para isso, você pode definir o encoding nos headers da sua requisição:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

 'Content-Type: application/json; charset=UTF-8'

));

Isso assegura que os caracteres especiais sejam interpretados corretamente pelo servidor e pela aplicação.

O que é cURL e para que serve?

Clique aqui: O que é cURL e para que serve?

O cURL (Client URL) é uma ferramenta e biblioteca que permite que programas se comuniquem com outros servidores, por meio de diversos protocolos de rede, como HTTP, HTTPS, FTP, entre outros.

No PHP, o cURL é utilizado para fazer requisições a APIs, enviar dados e obter respostas de servidores remotos.

É muito útil em situações como integração com sistemas de pagamento, serviços de terceiros e até em processos de hospedagem de sites, quando é necessário realizar chamadas a servidores externos para recuperar ou enviar informações.

Quando usar cURL em PHP?

Clique aqui: Quando usar cURL em PHP?

O cURL em PHP deve ser utilizado quando você precisa fazer requisições HTTP ou interagir com APIs externas. Ele é ideal para enviar dados via POST, obter respostas JSON ou XML ou até realizar integrações entre sistemas.

Caso precise fazer login em sistemas remotos, enviar formulários ou verificar status de URLs, o cURL oferece uma maneira eficiente e robusta de lidar com esses processos.

Ele também é útil para tarefas como automatização de fluxos de trabalho e integração entre plataformas.

Gostou deste conteúdo? Aprofunde os seus conhecimentos com o nosso guia sobre a evolução do PHP.

Este artigo foi útil ?

Artigos relacionados