Alguém pode me mostrar como fazer um php curl com um HTTP POST?
Quero enviar dados como este:
username=user1, password=passuser1, gender=1
Para www.domain.com
Espero que o cacho retorne uma resposta como result=OK
. Existem exemplos?
<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2&postvar3=value3");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
// Further processing ...
if ($server_output == "OK") { ... } else { ... }
?>
http_build_query()
para manipular parâmetros; basta passar a matriz para oCURLOPT_POSTFIELDS
suficiente.CURLOPT_POSTFIELDS
for uma matriz, oContent-Type
cabeçalho será definido como emmultipart/form-data
vez deapplication/x-www-form-urlencoded
. php.net/manual/en/function.curl-setopt.phptrue
vez de1
paraCURLOPT_POST
.Procedural
Orientado a Objeto
Uso
Nota lateral aqui: seria melhor criar algum tipo de interface chamada,
AdapterInterface
por exemplo, comgetResponse()
method e deixar a classe acima implementá-la. Então você sempre pode trocar essa implementação por outro adaptador do seu gosto, sem efeitos colaterais para o seu aplicativo.Usando HTTPS / criptografando tráfego
Geralmente, há um problema com o cURL no PHP no sistema operacional Windows. Ao tentar conectar-se a um endpoint protegido por https, você receberá um erro dizendo isso
certificate verify failed
.O que a maioria das pessoas faz aqui é dizer à biblioteca cURL para simplesmente ignorar erros de certificado e continuar (
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
). Como isso fará com que seu código funcione, você introduz uma enorme falha de segurança e permite que usuários mal-intencionados realizem vários ataques ao seu aplicativo, como o ataque Man In The Middle ou algo assim.Nunca, nunca faça isso. Em vez disso, basta modificar
php.ini
e informar ao PHP onde seuCA Certificate
arquivo está para permitir que ele verifique os certificados corretamente:O mais recente
cacert.pem
pode ser baixado da Internet ou extraído do seu navegador favorito . Ao alterarphp.ini
as configurações relacionadas, lembre-se de reiniciar o servidor da web.fonte
Um exemplo ao vivo do uso do php curl_exec para fazer uma postagem HTTP:
Coloque isso em um arquivo chamado foobar.php:
Em seguida, execute-o com o comando
php foobar.php
, ele despeja esse tipo de saída na tela:Então você fez um PHP POST para www.google.com e enviou alguns dados.
Se o servidor tivesse sido programado para ler as variáveis de postagem, ele poderia decidir fazer algo diferente com base nisso.
fonte
$postvars .= $key . $value;
deveria$postvars .= $key . $value ."&";
ou não?$fields
matriz e ela produzirá uma cadeia de consulta.curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
http_build_query
Como:curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
Pode ser facilmente alcançado com:
fonte
Pós-ondulação + tratamento de erros + definir cabeçalhos [graças a @ mantas-d]:
fonte
fonte
curl_close
dentro de umfinally
bloco.Se o formulário estiver usando redirecionamentos, autenticação, cookies, SSL (https) ou qualquer outra coisa que não seja um script totalmente aberto esperando variáveis POST, você começará a ranger muito rápido. Dê uma olhada no Snoopy , que faz exatamente o que você tem em mente e elimina a necessidade de configurar muitas despesas gerais.
fonte
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Uma resposta mais simples se você estiver passando informações para o seu próprio site é usar uma variável SESSION. Comece a página php com:
Se em algum momento houver informações que você deseja gerar no PHP e passar para a próxima página da sessão, em vez de usar uma variável POST, atribua-a a uma variável SESSION. Exemplo:
Então, na próxima página, você simplesmente faz referência a essa variável SESSION. NOTA: depois de usá-lo, certifique-se de destruí-lo, para que ele não persista depois de ser usado:
fonte
Aqui estão alguns códigos padrão para o PHP + curl http://www.webbotsspidersscreenscrapers.com/DSP_download.php
incluir nessas bibliotecas simplificará o desenvolvimento
fonte
Se você tentar fazer login no site com cookies.
Este código:
Pode não funcionar se você tentar fazer login, porque muitos sites retornam o status 200, mas a postagem não é bem-sucedida.
Uma maneira fácil de verificar se a postagem de login foi bem-sucedida é verificar se está configurando cookies novamente. Se na saída houver uma sequência de Set-Cookies, isso significa que as postagens não são bem-sucedidas e inicia uma nova sessão.
Além disso, a postagem pode ser bem-sucedida, mas o status pode ser redirecionado em vez de 200.
Para garantir que a postagem seja bem-sucedida, tente o seguinte:
Siga o local após a postagem, para que ela vá para a página para a qual a postagem é redirecionada:
E depois verifique se existem novos cookies na solicitação:
fonte
Exemplos de envio de formulário e dados brutos :
fonte