Estou usando a função do PHP file_get_contents()
para buscar o conteúdo de uma URL e depois processo os cabeçalhos pela variável $http_response_header
.
Agora, o problema é que alguns dos URLs precisam que alguns dados sejam postados no URL (por exemplo, páginas de login).
Como faço isso?
Eu percebo que usando stream_context eu posso fazer isso, mas não sou totalmente claro.
Obrigado.
php
http
http-post
file-get-contents
Paras Chopra
fonte
fonte
Respostas:
Enviar uma solicitação HTTP POST usando
file_get_contents
não é tão difícil, na verdade: como você adivinhou, é necessário usar o$context
parâmetroHá um exemplo dado no manual do PHP, nesta página: Opções de contexto HTTP (citando) :
Basicamente, você precisa criar um fluxo, com as opções corretas (há uma lista completa nessa página) e usá-lo como o terceiro parâmetro para
file_get_contents
- nada mais ;-)Como nota de rodapé: de um modo geral, para enviar solicitações HTTP POST, tendemos a usar curl, que oferece muitas opções - mas os fluxos são uma das coisas boas do PHP que ninguém conhece ... muito ruim .. .
fonte
content
não deve ser uma matriz PHP: tem que ser um querystring (isto é, deve tem o seguinte formato:param1=value1¶m2=value2¶m3=value3
) ;; que significa que você provavelmente vai ter que usarhttp_build_query($_POST)
$postdata = http_build_query($_POST)
.\r\n
quebras de linha - ver: stackoverflow.com/a/2107792/404960Uma alternativa, você também pode usar fopen
fonte
toto=1&tata=2
também. Eu não usei ofopen
, no entanto.fonte
file_get_contents
vez defopen
+stream_get_contents
. E você nem está fechando o "arquivo". Veja a resposta aceita por @PascalMARTIN.