Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal, estou tentando efetuar um login com curl, mas não funciona, eu precisaria ajustar algo no meu php por ser https? Ou é a mesma coisa que http nesse meu caso?
$postfields = array('username' => 'aaaaaaa','password' => 'bbbbbbb'); $pagina = 'https://apps.correios.com.br/cas/login'; $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $pagina);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$resultado = curl_exec($ch); echo $resultado; curl_close();
>
Cara uma vez eu precisei fazer, faz muito tempo eu acabei conseguindo, mas não lembro exatamente o que foi, mas lembro que eu sempre pesquisava nesse blog aqui:
http://blog.thiagobelem.net/login-automatico-em-php-usando-curl
Abraço
Valeu pela dica Marcello, mas mesmo assim não logou, estou pesquisando pra ver se há alguma diferença de http para https no curl...
Não consegui nada ainda gente, tentei isso tbm e nada...alguém tem uma idéia? Acho que é por ser https que não gira a coisa
$content = http_build_query(array( 'username' => 'xxxx', 'password' => 'zzzz',)); $context = stream_context_create(array( 'https' => array( 'method' => 'POST', 'content' => $content, ))); $result = file_get_contents('https://apps.correios.com.br/cas/login', null, $context);
Tenho algo bem parecido.
Testa ai:
<?php
$ch = curl_init();
// Define a URL original (do formulário de login)
curl_setopt($ch, CURLOPT_URL, 'http://site.com.br/index.php?ToDo=processLogin'); //repare o GET Sendo passado....
// Habilita o protocolo POST
curl_setopt ($ch, CURLOPT_POST, 1);
// Define os parâmetros que serão enviados (usuário e senha por exemplo)
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=josue&password=123456'); //Passamos alguns parametros via POST array(username => '', password => 123456)
// Imita o comportamento patrão dos navegadores: manipular cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
// Define o tipo de transferência (Padrão: 1)
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// Executa a requisição
$store = curl_exec ($ch);
// Define uma nova URL para ser chamada (após o login)
$id = 2;
curl_setopt($ch, CURLOPT_URL, "http://site.com.br/index.php?ToDo=editProduct&productId=$id");// Encerra o cURL
curl_close ($ch);
// Create DOM from URL or file
$html = str_get_html($content);
>
Tenho algo bem parecido.
Testa ai:
<?php
$ch = curl_init();
// Define a URL original (do formulário de login)
curl_setopt($ch, CURLOPT_URL, 'http://site.com.br/index.php?ToDo=processLogin'); //repare o GET Sendo passado....
// Habilita o protocolo POST
curl_setopt ($ch, CURLOPT_POST, 1);
// Define os parâmetros que serão enviados (usuário e senha por exemplo)
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=josue&password=123456'); //Passamos alguns parametros via POST array(username => '', password => 123456)
// Imita o comportamento patrão dos navegadores: manipular cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
// Define o tipo de transferência (Padrão: 1)
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// Executa a requisição
$store = curl_exec ($ch);
// Define uma nova URL para ser chamada (após o login)
$id = 2;
curl_setopt($ch, CURLOPT_URL, "http://site.com.br/index.php?ToDo=editProduct&productId=$id");// Encerra o cURL
curl_close ($ch);
// Create DOM from URL or file
$html = str_get_html($content);
Pois tentei Gabriel, to achando que por set htpps, deve ser algo diferente que tem que ser feito
Monitora a aba NetWork ( Google Chrome -> ' Ctrl + Shift + i , Aba NetWork)
E veja se é passado algum parametro 'secreto'.
O meu exemplo acima o sistema obrigava passar um Get (ToDo=processLogin), sem ele não funcionava.
Enfim da olhada como a requisição é enviada as vezes passou algo batido alem de login/senha (token por exemplo...)
Mas sobre ser HTTPS, tenta a resposta do meu chara.
Na propria documentação do php tem alguns exemplos nos comentarios utilizando Curl + SSL/HTTPS
http://www.php.net/manual/pt_BR/ref.curl.php
Boa sorte broo.
Ps: Se conseguir alguma coisa posta ai tmb a resposta fiquei curioso, vira e mexe faço uns spiderzin e nunca me deparei com problema em SSL.
>
Monitora a aba NetWork ( Google Chrome -> ' Ctrl + Shift + i , Aba NetWork)
E veja se é passado algum parametro 'secreto'.
O meu exemplo acima o sistema obrigava passar um Get (ToDo=processLogin), sem ele não funcionava.
Enfim da olhada como a requisição é enviada as vezes passou algo batido alem de login/senha (token por exemplo...)
Mas sobre ser HTTPS, tenta a resposta do meu chara.
Na propria documentação do php tem alguns exemplos nos comentarios utilizando Curl + SSL/HTTPS
http://www.php.net/manual/pt_BR/ref.curl.php
Boa sorte broo.
Ps: Se conseguir alguma coisa posta ai tmb a resposta fiquei curioso, vira e mexe faço uns spiderzin e nunca me deparei com problema em SSL.
Fala Gabriel, consegui logar sim...assim deu certo
$usuario = 'xxxx';
$senha = 'yyyy';
$url = 'https://apps.correios.com.br/cas/login';
$ch = curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
$html_form = curl_exec($ch);
if ($html_form) {
$documento = new DOMDocument;
$documento->loadHTML($html_form);
$inputs = $documento->getElementsByTagName('input');
foreach ($inputs as $input){
$post[$input->getAttribute('name')] = $input->getAttribute('value');
}
$post['username'] = $usuario;
$post['password'] = $senha;
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($post));
$retorno = curl_exec($ch);
echo $retorno;
}else{
echo curl_error($ch);
}
curl_close($ch);
?>
Agora me deparei com outro problema, depois desse login efetuado, eu tenho que fazer outro post pra outra url...
Aí que o bicho pega, ele loga normalmente e quando tento fazer o post pra segunda url, da erro de usuário não autenticado, como se perdesse a sessão.
Estou pesquisando bastante sobre cookies do cURL, mas até agora sem sucesso...
Preciso então aprender como "manter a sessão" com cookie
Se você ou alguém souber como fazer, ajuda aí por favor =)
Cara uma vez eu precisei fazer, faz muito tempo eu acabei conseguindo, mas não lembro exatamente o que foi, mas lembro que eu sempre pesquisava nesse blog aqui:
http://blog.thiagobelem.net/login-automatico-em-php-usando-curl
Abraço