
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); Site novo há semanas e nenhuma página indexada? Confira a caixinha de visibilidade em Leitura, o noindex no HTML e…
O retorno do array_map voltou com índice 0, 1, 2 e o código que dependia da chave quebrou. Entenda quando…
Dump de 12 GB que demora horas porque arrasta report_event e cron_schedule. Faça o backup em duas passadas, guarde só…
Escreveu a preference e o Magento 2 continua usando a classe original? Confira a área do di.xml, o generated/code e…
Cadastrou Cor direto na aba Atributos do produto e o filtro por atributo vem vazio. Veja como identificar o tipo,…
Precisa de um SELECT no banco do cliente e só tem SSH? O wp db query pega a senha do…
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/