Como enviar uma requisição POST sem formulário

Existe algumas formas de enviar uma requisição POST para uma pagina, entre a mais usual submeter um formulário HTML

Supondo, que você deseje enviar informações para uma outra pagina, você faria o seguinte:

PHP Code
<form name='ViniciusTest' method='POST' action='make_action.php' >
<input type='hidden' name='field1' value='ViniciusMuniz'>
<input type='text' name='field2'>
<input type='text' name='field3'>
<input type='submit'>
</form>

Mas, e se você desejasse enviar isso diretamente por PHP sem que passe isso pelo usuário acessando sua aplicação?

Eu já vi muita “gambiarra” para fazer uma coisa tão simples, na empresa em que estou no momento(Netmake http://www.scriptcase.net/), é incrivel a imaginação para se fazer isso.

Bom, existem várias formas de se fazer isso, não dizendo que existe as certas e as erradas… mas certamente existem as simples.

Forma Simples

O mesmo que o código HTML acima iria submeter, você poderia utilizar o código:

$content = http_build_query(array(
'field1' => 'Value1',
'field2' => 'Value2',
'field3' => 'Value3',
));

$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'content' => $content,
)
));

$result = file_get_contents('http://exemplo/make_action.php', null, $context);

Explicando o código

Na primeira linha o código

$content = http_build_query(array(

, a função http_build_query como diz a própria documentação do php Gera a string de consulta (query) em formato URLhttp://br1.php.net/http_build_query, resumindo, a função irá transformar um array de dados, em um forma de query, no caso, seria algo como:

field1=Value1&field2=Value2&field3=Value3

Na sexta linha encontraremos a função stream_context_create http://php.net/stream_context_create, que criará um fluxo de contexto, ou seja irá preparar a requisição da mesma forma que é feito pelo browser antes de enviar para o php quando submetemos o formulário.

E por ultimo a função file_get_contents, uma das minhas funções preferidas no php(já varri muito site com ela). Ela fará a requisição para a pagina, no caso http://exemplo/make_action.php, enviando o contexto gerado em stream_context_create, e pegará o output da pagina e colocando na variável $result;

Simples não? Essa é minha forma favorita, porem existem outras, se você se interessar procure por curl

Se você deseja receber mais informações e dicas sobre PHP e linux, assine nossa lista aqui! No próximo post aprenda algumas dicas sobre escrever e ler arquivos com apenas duas funções e de forma muito simples. Se gostou, da um like na pagina, e/ou um comentário logo abaixo.


Originally published at ViniciusMuniz.com.