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:
<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.
Boa brother, uma coisa tão simples que muitas vezes nos perdemos ou esquecemos como fazer.
Show, melhor solução encontrada na internet. Rápida e simples.
E como eu faço para chamar a página que irá receber as variáveis ?
Usa header.
header("Location: http://hoo.st");
Muito bom. Justamente o que eu estava precisando.
Breve, claro e coerente.
Obrigado!
Vinícius, no meu caso, preciso enviar via POST, dados para a URL do Checkout da cielo, nesse caso eu coloco essa URL da Cielo no header ou no file_get_contents?
No file_get_contents
Show de bola brow
boa noite!
E como fica no outro lado? Como receber estes dados?
entendi que existe o array com os dados. Supomos que o array seja:
‘produto_1’ => ‘00001’,
‘produto_2’ => ‘00002’,
‘produto_3’ => ‘00003’
No outro lado, como faço para atribuir estes valores à variáveis?
abc.
Olá,
Algo como :
echo $_POST['produto_1'];
echo $_POST['produto_2'];
echo $_POST['produto_3'];
Bom dia, mas nesse caso eu irei enviar dados e receber um result, mas caso eu queira ficar na outra página e tratar la o que foi recebido via post eu faço como?
Depende, qual a intenção em tratar lá o retorno?
Boa tarde, Vinicius!
Parabéns pela intenção de nos ajudar!
Minha dúvida é: Como enviar essa variável via PHP? Eu não consigo compreender como disparar essa função. Em javascript essa ideia seria mais clara, mas em PHP não. Minha necessidade é enviar um id para consultas em outra página usando POST ao invés de GET (página para editar um produto por exemplo).
Desde já, obrigado!
O que eu quero substituir é exatamente isso “<a href="edita_produto?produto=”>Editar“, para ter essa URL “www.dominio.com.br/edita_produto”, ao invés dessa “www.dominio.com.br/edita_produto?produto=23”.
Valeu, mestre!
O código, não é para ser executado no click.
Para fazer isso, teria que usar javascript.
Bacana. Agora como posso fazer para ao invés dele retornar o resultado da página ele ir para página com essas variáveis e lá eu exibir alguns dados?
Teria que mandar com header, ou usar curl.
Boa tarde…
Estou tentando implementar o teu código, mas acho que estou batendo cabeça em algo fácil.
Na minha aplicação, eu tenho uma flag no banco sobre o login. Se estiver true, obriga a fazer login, onde o usuário digita seus dados. Se false é para fazer login com dados padrões.
Essa validação é na index.php, caso seja o false estou passando esses dados via file_get_contents() para uma página chamada verificaLogin.php.
No momento que eu passo esses dados, o script verifica se existe o usuário no banco e me encaminha para outra página.
Como conseguiria fazer isso?
Tem que verificar o que está chegando no arquivo, para fazer a validação.
Como ficaria se enviasse um json?
Seria da mesma forma, colocando o json, em um dos campos.
oi, gostei do site, legal,
achei o que eu precisava (como-enviar-uma-requisicao-post-sem-formulario)
MASSSS, detalhe, não sei se é aqui ou no site, mas aquelas caixas da direita ficam em cima do texto do site, voce precisa ajustar seu CSS a classe “sidebar”
Faça isso que vai ficar show
se conseguir deixar responsivo, melhor ainda!!
até…
Obrigado, vou verificar!
Muito bom, parabéns bro
Cara, muito obrigado, salvou meu dia! rsrs
Dá pra enviar arquivos dessa forma?
Pergunto porque eu tenho um sistema que contem anexos, gostaria de enviar esses anexos a outro sistema que tenho.
Desde já agradeço.
Da sim. Se ainda tiver com dúvida, fala comigo pelo formulário de contato!
Sou novo no assunto mas queria aprender a fazer essa requisição, Teria algum tipo de arquivo de exemplo prático para me disponibilizar? Realmente não entendi e acho que vendo funcionar seria mais simples.
top amigo ajudou muito
Me ajudou. Obrigado.
Implementei o código que você explicou, mas na página que recebo o “result”, dá erro de Undefined Index. Os nomes estão corretos, está tudo certo.
Tem que debugar na aplicação que recebe o POST o que está chegando lá.
Boa tarde!
Excelente dicas!! PARABÉNS!!!
Também tenho a dúvida: utilizando esse método, como faço para enviar arquivo para meu script do outro lado?
tem um sistema que via form em uma “gambiara” que eu fiz ta recebendo normal, mas de outro jeito não sabe, ja fiz de tudo e nada, oque pode ser?
Tem que debugar na aplicação que recebe o POST o que está chegando lá.