Na verdade, eu quero ler o conteúdo que vem após a consulta de pesquisa, quando terminar. O problema é que o URL aceita apenas POST
métodos e não executa nenhuma ação comGET
método ...
Eu tenho que ler todo o conteúdo com a ajuda de domdocument
ou file_get_contents()
. Existe algum método que me permita enviar parâmetros com o POST
método e depois ler o conteúdo via PHP
?
file_get_contents()
somente se os wrappers fopen tiverem sido ativados. Veja php.net/manual/en/…file_get_contents()
file_get_contents()
faz parte do núcleo do PHP. Além disso, o uso desnecessário de uma extensão pode ampliar a superfície de ataque do seu aplicativo. Por exemplo, Google php curl cveVocê pode usar cURL :
fonte
Eu uso a seguinte função para postar dados usando curl. $ data é uma matriz de campos a serem postados (serão codificados corretamente usando http_build_query). Os dados são codificados usando application / x-www-form-urlencoded.
@Edward menciona que http_build_query pode ser omitido, pois o curl codificará corretamente a matriz passada para o parâmetro CURLOPT_POSTFIELDS, mas saiba que, nesse caso, os dados serão codificados usando dados de várias partes / formulário.
Eu uso essa função com APIs que esperam que os dados sejam codificados usando application / x-www-form-urlencoded. É por isso que eu uso http_build_query ().
fonte
http_build_query
converte$data
array em uma string, evitando a saída como multipart / form-data.... CURLOPT_RETURNTRANSFER, true
resulta em$response
conter o conteúdo.file_get_contents
e sua solução precisa de CURL o que muitas pessoas não têm. portanto, sua solução talvez esteja funcionando, mas não está respondendo à pergunta de como fazer isso com as funções nativas internas de arquivo / fluxo.Eu recomendo que você use o pacote de código aberto guzzle que é totalmente unidade testada e utiliza as mais recentes práticas de codificação.
Instalando Guzzle
Vá para a linha de comando na pasta do projeto e digite o seguinte comando (supondo que você já tenha o compositor do gerenciador de pacotes instalado). Se precisar de ajuda para instalar o Composer, consulte aqui .
Usando o Guzzle para enviar uma solicitação POST
O uso do Guzzle é muito direto, pois usa uma API leve e orientada a objetos:
fonte
Existe outro método CURL se você estiver indo por esse caminho.
Isso é bastante simples quando você começa a entender como a extensão de curl do PHP funciona, combinando vários sinalizadores com chamadas setopt (). Neste exemplo, tenho uma variável $ xml que contém o XML que preparei para enviar - publicarei o conteúdo disso no método de teste do exemplo.
Primeiro inicializamos a conexão, depois definimos algumas opções usando setopt (). Eles dizem ao PHP que estamos fazendo uma solicitação de postagem e que estamos enviando alguns dados com ele, fornecendo os dados. O sinalizador CURLOPT_RETURNTRANSFER informa ao curl para nos fornecer a saída como o valor de retorno de curl_exec em vez de enviá-lo. Depois fazemos a ligação e fechamos a conexão - o resultado está em $ response.
fonte
$ch
não deve ser$curl
, correto?Se por acaso você estiver usando o Wordpress para desenvolver seu aplicativo (na verdade, é uma maneira conveniente de obter autorização, páginas de informações etc. mesmo para coisas muito simples), use o seguinte trecho:
Ele usa maneiras diferentes de fazer a solicitação HTTP real, dependendo do que está disponível no servidor da web. Para mais detalhes, consulte a documentação da API HTTP .
Se você não deseja desenvolver um tema ou plug-in personalizado para iniciar o mecanismo do Wordpress, basta fazer o seguinte em um arquivo PHP isolado na raiz do wordpress:
Não mostrará nenhum tema ou produzirá HTML, basta cortar com as APIs do Wordpress!
fonte
Gostaria de acrescentar algumas idéias sobre a resposta baseada em cachos de Fred Tanrikut. Sei que a maioria deles já está escrita nas respostas acima, mas acho que é uma boa ideia mostrar uma resposta que inclua todos eles juntos.
Aqui está a classe que eu escrevi para fazer solicitações HTTP-GET / POST / PUT / DELETE com base em curl, referente a quase todo o corpo da resposta:
Melhorias
Exemplo de uso
PEGUE
POSTAR
COLOCAR
EXCLUIR
Teste
Você também pode fazer alguns testes de serviço interessantes usando esta classe simples.
fonte
Outra alternativa do método sem ondulação acima é usar as funções de fluxo nativas :
stream_context_create()
:stream_get_contents()
:Uma função POST com estes pode ser simplesmente assim:
fonte
fclose()
se$fp
estiverfalse
. Porquefclose()
espera que um recurso seja parâmetro.A melhor maneira de enviar
GET
ouPOST
solicitaçõesPHP
é a seguinte:O código é retirado da documentação oficial aqui http://docs.php.net/manual/da/httprequest.send.php
fonte
Há mais um que você pode usar
Clique aqui para mais detalhes
fonte
Eu estava procurando por um problema semelhante e encontrei uma abordagem melhor para fazer isso. Então aqui vai.
Você pode simplesmente colocar a seguinte linha na página de redirecionamento (por exemplo, page1.php).
Eu preciso disso para redirecionar solicitações POST para chamadas à API REST . Esta solução é capaz de redirecionar com dados de postagem, bem como valores de cabeçalho personalizados.
Aqui está o link de referência .
fonte
redirect a page request with POST param
vssend POST request
. Para mim, o objetivo de ambos é o mesmo, corrija-me se estiver errado.Aqui está usando apenas um comando sem cURL. Super simples.
fonte
Experimente o pacote HTTP_Request2 do PEAR para enviar facilmente solicitações POST. Como alternativa, você pode usar as funções curl do PHP ou usar um contexto de fluxo PHP .
HTTP_Request2 também possibilita zombar do servidor , para que você possa testar seu código facilmente
fonte