
Como fazer uma requisição POST assíncrona no PHP.
A requisição é considerada a “assíncrona” por que não será aguardado um retorno da URL de destino.
É muito útil para o envio de e-mail ou geração de logs, pois você não quer que o seu usuário fique esperando até que a execução do processo seja concluída.
Alguns servidores de e-mail são bem lentos e chegam a levar mais de 30 segundos para um simples envio em horário de pico, imagine o usuário esperando todo esse tempo.
Para tal feito, iremos utilizar a seguinte função:
function asyncRequest($url, $payload) {
foreach($payload as $key=>$value) $values[]="$key=".urlencode($value);
$post_string=implode("&",$values);
$parts=parse_url($url);
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 30);
$out = "POST ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Content-Length: ".strlen($post_string)."\r\n";
$out.= "Connection: Close\r\n\r\n";
if (isset($post_string)) $out.= $post_string;
fwrite($fp, $out);
fclose($fp);
} A variável “url” é o destino da requisição.
Variável “payload” é array com os dados que serão enviados via POST.
Exemplo de sua utilização.
$url = "http://teste.com.br/enviar.php";
$payload = array("nome_da_variavel_post" => "valor_de_teste");
asyncRequest($url, $payload); Módulo gratuito Roger_CnpjAlfanumerico que aplica máscara e validação do novo CNPJ alfanumérico no checkout e formulários do Magento 2 e…
A partir de 06/07/2026 a Receita passa a emitir CNPJ alfanumérico. Conheça o plugin grátis que aplica máscara e validação…
Para remover um módulo do Magento 2, siga os passos abaixo: 1. Desabilitar o módulo Primeiro, desabilite o módulo usando…
Para cancelar 100% do pedido e criar um crédito para todos os itens através da API REST do Magento 2,…
No Magento 2, a quantidade "reservada" na "Salable Quantity" é gerenciada principalmente pelos módulos MSI (Multi-Source Inventory). A "Salable Quantity"…
Como corrigir o erro ao acessar o Admin do Magento 2. Mesmo após fazer o login, permanece na tela de…
Ver comentários
Boa tarde Roger!!
Obrigado pelo post.
Apenas não entendi a utilização da variável "$params" do primeiro foreach.
Olá Felipe, boa noite, bem observado.
A variável está errada, correto é apenas o laço com o "payload",
Corrigi no Post, muito obrigado!
Boa tarde!!
Que bom que pude ajudar Roger!
Porém, infelizmente não consegui fazer funcionar.
A função fsockopen retornou a variável $errno com "0" (zero) e a variável $errstr vazia. No caso, entende-se que funcionou, porém, não funcionou.
Olá Felipe, boa tarde,
Para que você verifique se a função funcionou corretamente, você deverá validar no arquivo de destino.
Está função é assíncrono, não irá esperar o retorno do destino.
Se encaixa perfeitamente nesta situação: O cliente(browser) faz uma requisição ao servidor, nessa requisição o PHP executa uma função assíncrona que pode demorar alguns segundos, porém antes da mesma finalizar, o servidor responde para o cliente de forma que enquanto a operação assíncrona está sendo executada, o browser não precise ficar esperando ela acabar para receber uma resposta.
Talvez este Post se encaixe melhor na sua necessidade: https://rogertakemiya.com.br/requisicao-post-com-retorno-em-html-no-php/