Como fazer uma solicitação PUT com curl_init()?

Utilize a função curl_init() para construir um payload de dados e garantir a entrega segura dos dados em suas requisições PUT.

Miguel Oliveira

Miguel Oliveira

21 maio 2025

Como fazer uma solicitação PUT com curl_init()?

A aplicação de software cURL, formalmente conhecida como "Cliente para URLs", fornece aos desenvolvedores um conjunto robusto de ferramentas para gerenciar transferências de dados. Ela opera em dois modos distintos: uma interface de linha de comando fácil de usar que atende a interações fundamentais e uma poderosa biblioteca projetada para integração sem emendas em projetos de programação.

💡
Comece a trabalhar nas suas APIs de comando cURL com Apidog, sua solução completa para todos os problemas de API. Com Apidog, você pode construir, depurar, simular e documentar APIs cURL em pouco tempo!

Para entender melhor o Apidog, experimente por si mesmo clicando no botão abaixo!
button

Definição Formal do curl_init()

Com base no site oficial do PHP, a função curl_init inicializa uma sessão cURL e retorna um manipulador cURL para uso com as funções curl_setopt(), curl_exec() e curl_close().

Parâmetros Envolvidos

url

Se você fornecer uma URL, a opção CURLOPT_URL será definida para o seu valor. Você também pode definir manualmente esta opção usando a função curl_setopt().

No entanto, observe que o protocolo file está desativado pelo cURL se open_basedir tiver sido definido.

Valores de Retorno

A função curl_init() retorna um manipulador cURL em caso de sucesso, e false em caso de erro.

O que é um Requisição PUT?

A requisição PUT dentro do Protocolo de Transferência de Hipertexto (HTTP) atua como uma ferramenta refinada para gerenciar recursos em um servidor web. Ela se desvia de sua contraparte, a requisição GET (usada para recuperação de dados), ao visar especificamente modificações no lado do servidor.

Função das Requisições PUT

Diferentemente de sua contraparte, a requisição GET usada para recuperação de dados, uma requisição PUT foca em modificar informações no lado do servidor. Essa modificação pode englobar duas ações principais:

  1. Atualizando Recursos Existentes: Se um recurso (como uma conta de usuário ou um produto em um banco de dados) já existir em uma URL específica, uma requisição PUT pode ser usada para atualizar seus dados associados.
  2. Criando Novos Recursos: Em cenários onde um recurso não existe na URL designada, uma requisição PUT pode ser empregada para criar um novo recurso com os dados fornecidos.

Colocação de Dados

As requisições PUT geralmente transmitem dados dentro do corpo da requisição, semelhante às requisições POST. Esses dados frequentemente representam o novo ou atualizado estado do recurso sendo alvo.

Idempotência

Uma característica definidora das requisições PUT é sua natureza idempotente. Isso implica que executar uma requisição PUT várias vezes com dados idênticos produzirá o mesmo resultado. Em termos mais simples, enviar uma requisição PUT uma ou várias vezes com os mesmos dados leva ao mesmo resultado no servidor.

Casos Comuns de Uso das Requisições PUT

Exemplos de Código para Fazer Requisições PUT com a Função curl_init()

Aqui estão alguns exemplos de codificação em PHP que você pode consultar se desejar fazer requisições PUT com a função curl_init().

Exemplo 1 - Atualizando Informações do Usuário (Dados JSON)

Este exemplo atualiza as informações do perfil de um usuário em um servidor usando dados JSON.

<?php

$url = "https://www.example.com/api/users/123"; // Substitua pelo ID real do usuário
$new_email = "new_email@example.com";

$data = array(
  "email" => $new_email
);

$data_json = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Defina o método da requisição como PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Defina os dados PUT como JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Retorne a resposta

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Defina o tipo de conteúdo como JSON
  'Authorization: Bearer YOUR_API_KEY'  // Adicione o cabeçalho de autorização
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Perfil do usuário atualizado com sucesso!";
} else {
  echo "Erro: " . curl_error($ch);
}

?>

Explicação do código:

  1. Definimos a URL de destino (incluindo o ID do usuário) e o novo endereço de e-mail.
  2. Criamos um array $data contendo o e-mail atualizado e o convertendo para JSON usando json_encode.
  3. Inicializamos o manipulador cURL e definimos o método da requisição como PUT usando CURLOPT_CUSTOMREQUEST.
  4. Definimos os dados PUT com CURLOPT_POSTFIELDS e configuramos o cabeçalho do tipo de conteúdo como JSON.
  5. Adicionamos um cabeçalho de autorização com sua chave de API para acesso seguro.
  6. Executamos a requisição, fechamos o manipulador e verificamos se houve resposta bem-sucedida.

Exemplo 2 - Fazendo Upload de um Arquivo (Dados Brutos)

Este exemplo faz upload de um arquivo para um servidor usando dados brutos.

<?php

$url = "https://www.example.com/api/uploads";
$filename = "myfile.txt";

$file_content = file_get_contents($filename); // Ler o conteúdo do arquivo

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Defina o método da requisição como PUT
curl_setopt($ch, CURLOPT_PUT, 1);  // Ative o modo de upload PUT

curl_setopt($ch, CURLOPT_INFILE, fopen($filename, "rb")); // Defina o arquivo para upload
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename)); // Defina o tamanho do arquivo

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Retorne a resposta

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/octet-stream' // Defina o tipo de conteúdo para dados brutos
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Arquivo enviado com sucesso!";
} else {
  echo "Erro: " . curl_error($ch);
}

?>

Explicação do código:

  1. Definimos a URL de upload e o nome do arquivo.
  2. Lemos o conteúdo do arquivo usando file_get_contents.
  3. Inicializamos o manipulador cURL e definimos o método da requisição como PUT.
  4. Ativamos o modo de upload PUT com CURLOPT_PUT.
  5. Especificamos o arquivo para o upload usando CURLOPT_INFILE e seu tamanho com CURLOPT_INFILESIZE.
  6. Definimos o cabeçalho do tipo de conteúdo para indicar dados brutos.
  7. Executamos a requisição, fechamos o manipulador e verificamos se houve resposta bem-sucedida.

Exemplo 3 - PUT Condicional com ETag

Este exemplo demonstra uma requisição PUT condicional usando um ETag para bloqueio otimista.

<?php

$url = "https://www.example.com/api/posts/123";
$new_title = "Título Atualizado";
$etag = "some-etag-value";  // Substitua pelo ETag real

$data = array(
  "title" => $new_title
);

$data_json = json_encode($data);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Defina o método da requisição como PUT
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); // Defina os dados PUT como JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // Retorne a resposta

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: application/json',   // Defina o tipo de conteúdo como JSON
  'If-Match: ' . $etag  // Adicione o ETag para a atualização condicional
));

$response = curl_exec($ch);

curl_close($ch);

if($response) {
  echo "Post atualizado com sucesso!";
} else {
  $error = curl_error($ch);
  if (strpos($error, '412 Precondition Failed') !== false) {
    echo "Atualização falhou: inconsistência de ETag (os dados podem ter sido modificados por outro usuário).";
  } else {
    echo "Erro: " . $error;
  }
}

?>

Explicação do código:

  1. Definimos a URL de destino (ID do post), o novo título e o ETag recuperado do servidor.
  2. Criamos um array $data e o convertendo para JSON.
  3. Definimos o método da requisição como PUT e incluímos os dados PUT.
  4. Adicionamos um cabeçalho If-Match com o ETag para garantir que a atualização ocorra apenas se a versão atual no servidor corresponder ao ETag. Isso evita sobrescrever alterações feitas por outro usuário (bloqueio otimista).
  5. Verificamos a resposta por sucesso e lidamos com um erro específico (412 Precondition Failed) indicando uma inconsistência de ETag.

Nota para Lembrar

Por favor, garanta que os exemplos de código acima não sejam copiados e colados em seus IDEs, pois estão simplificados e requererão modificações adicionais para atender às necessidades da sua aplicação.

Para a documentação oficial, você pode conferir em: https://www.php.net/manual/en/book.curl.php

Acelere Seu Desenvolvimento de API cURL com Apidog

Apidog é uma plataforma sofisticada de desenvolvimento de APIs capaz de converter linhas de comando cURL em exibidas gráficas bonitas e intuitivas, facilitando o entendimento e a manipulação das APIs pelos desenvolvedores.

especificações do apidog
button

Não só você pode importar comandos cURL, mas também construir, depurar, simular e documentá-los como qualquer outra API! Com tanta conveniência, o Apidog pode apoiá-lo com um fluxo de trabalho ininterrupto.

Importar APIs cURL em Segundos

importar curl no apidog

O Apidog suporta usuários que desejam importar comandos cURL para o Apidog. Em um projeto vazio, clique no botão roxo + na parte superior esquerda da janela do Apidog e selecione Importar cURL.

exemplo de código stripe curl

Copie e cole o comando cURL na caixa exibida na sua tela.

importação de código curl bem-sucedida

Se bem-sucedido, você deve agora ser capaz de ver o comando cURL na forma de uma requisição de API.

button

Inseguro sobre PHP? Gere Código Com Apidog

Se você não tem experiência anterior em programação na linguagem PHP, não tema! O Apidog possui uma funcionalidade de geração de código na qual você pode confiar, fornecendo estruturas de código para várias outras linguagens de programação.

gerar código do cliente com apidog

Primeiro, localize o botão </> Gerar Código em qualquer API ou requisição, e selecione Gerar Código do Cliente na lista suspensa.

gerar código php com apidog

Em seguida, selecione PHP e encontre a seção de cURL. Você deve agora ver o código gerado para cURL. Tudo que você precisa fazer é copiá-lo e colá-lo em seu IDE (Ambiente de Desenvolvimento Integrado) e continuar desenvolvendo sua aplicação.

button

Conclusão

Ao dominar requisições PUT com curl_init(), você desbloqueou uma poderosa ferramenta para interagir com servidores web. Esta função permite que você não apenas atualize recursos existentes, mas também crie novos. Seja gerenciando perfis de usuários, modificando entradas de banco de dados ou fazendo upload de arquivos, as requisições PUT oferecem um método preciso e eficiente para manipulação de dados.

Lembre-se, curl_init() fornece uma abordagem versátil, permitindo que você especifique formatos de dados, defina cabeçalhos personalizados para comunicação segura e até mesmo gerencie cenários como atualizações condicionais e relatórios de progresso para transferências de arquivos grandes. Com esse novo conhecimento, você pode aproveitar com confiança as requisições PUT para elevar a funcionalidade e o desempenho de suas aplicações web.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs