php - cURL login no myVodafone

fabioneves

Power Member
Boas,

Estou a tentar efectuar login no myVodafone através de um script em PHP utilizando a lib cURL.
Já fiz um identico para o meu blog wordpress e funciona na boa, mas para o site da vodafone não estou a conseguir..

Se alguém me pudesse dar uma ajuda eu agradecia, eis o que eu tenho até agora:

Código:
// dados para o POST
$data = array('Login1:userid' => 'num', 'Login1:password' => 'pw');

//inicia o objecto
$ch = curl_init();

// opções/acções a passar ao objecto
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_URL, "https://my.vodafone.pt/guest/"); // URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Redirecciona caso o site "mande"
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); // Agent
curl_setopt($ch, CURLOPT_POST, true); // Opção do CURL para efectuar um post ao abrir o URL
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Campos definidos em cima para o submit

// Executa as opções definidas no objecto
curl_exec($ch);
 
E podes explicar em que consiste a lib cURL?

Permite-te comunicar em vários protocolos, como: http, https, ftp, telnet, etc..
Dá imenso jeito se queres por exemplo ir buscar um valor qualquer a um site que necessite login, como é o caso (a minha ideia é criar uma WebApp para o iPhone, estou quase lá ;)).

Ao iniciares o objecto, podes definir uma série de opções que vão ditar a interacção com a conexão que efectuaste, depois mandas o curl executar essas mesmas opções e depois ele faz "output" do resultado que receber.

Se tiveres mais alguma dúvida, diz qualquer coisa.

Manual PHP (curl_setopt)
Link
 
Isso quer dizer que por exemplo, usando o exemplo da vodafone - envio de sms, eu conseguiria criar um site com 4 campos, em que um era o numero, outro para a pass e depois mais dois um para o numero a quem ia enviar a sms e outro para o texto. Isto era possivel usando essa libraria?
 
Exactamente, é uma das funcionalidades que vou colocar na minha webapp!
Penso que até amanha à noite já posto a minha classe para "brincar" com o site da vodafone..
Acabei o work agora vou pra casa, Abraço
 
Bem eu estou tambem a tentar programar isso. Fiz o seguinte código:

Código:
<?php
$nome_utilizador = "91xxxxxxx;
$password = "xxxxxxxx";
$LOGINURL = "https://my.vodafone.pt/guest/";
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
$POSTFIELDS = 'Login1:userid='.$nome_utilizador.'&Login1:password='.$password;
$referer = "https://my.vodafone.pt/sc/SCIFrameIndex.aspx";

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_URL,$LOGINURL);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_COOKIEFILE, '/temp/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, '/temp/cookie.txt');
$result = curl_exec ($ch);
curl_close ($ch);
echo $result;
?>
Acontece que esse script nao esta a funcionar :S. Nao sei se terá a ver com o URL de login. Utilizei o LiveHTTPHeaders e obtem-se os seguintes POST quando se faz o login:


POST
Código:
/cms2002/templates/homepage.aspx?NRMODE=Published&NRORIGINALURL=%2fguest%2fhomepagePre%2ehtm%3fou%3d%26ecode%3d202%26edesc%3dNo%2520Authentication%2520Ticket%2520Provided&NRNODEGUID=%7bB9DED956-B87F-4C24-852C-70A3BBBB0161%7d&NRCACHEHINT=Guest&edesc=No%20Authentication%20Ticket%20Provided&ecode=202 __EVENTTARGET=Login1%3ALoginBttn&__EVENTARGUMENT=&__VIEWSTATE=dDwt[B][I](...)[/I][/B]PVw%2BXDxhIGhyZWY9L2d1ZXN0L2Z%3D&HeaderVodafone%3ATxtPesquisa=Procurar&Login1%3Auserid=91xxxxxxx&Login1%3Apassword=xxxxxxx
POST
Código:
/ucp//auth/login.asp?crypt=0&prf=0&key=alias userid=91xxxxxxx&password=xxxxxxx&sru=https%3A%2F%2Fmy.vodafone.pt%2Fpm%2FSPMDispatcher.aspx%3FPMcmd%3D17%26userClass%3D10%26Guid%3D%7BB9DED956-B87F-4C24-852C-70A3BBBB0161%7D%26ReturnUrl%3Dhttps%253a%252f%252fmy.vodafone.pt%252fguest%252fhomepagePre.htm&fru=https%3A%2F%2Fmy.vodafone.pt%2Fguest%2FhomepagePre.htm&svc_id=myprodpub



Agradecia a quem me pudesse ajudar a programar isso.
 
ja consegui obter a pagina de envio de sms do my vodafone atraves do phpcurl. Mas vendo bem nao era isso que queria.
O que pretendia era por exemplo enviar uma sms partir do my vodafone mas em que o numero e o texto a enviar eram definidos nos campos de uma pagina criada por mim. Depois o script apenas enviaria esses campos para o myvodafone e processava o envio automaticamente.
Alias o meu objectivo mesmo é como tenho cartoes das 3 redes era conjugar numa unica pagina os serviços de envio de sms das 3 operadoras. é que vendo bem nem sei se o php cURL permite fazer isso.
Uma duvida (um bocado estupida) é por exemplo: por detras da pagina de envio de sms do my vodafone há um script que corre por detrás para enviar o sms. Havera forma de comunicar logo directamente com esse script em vez de estar a comunicar com a pagina do my vodafone?
 
podes colocar aqui o código de como conseguiste obter a página de envio de sms do my vodafone? tou farto de tentar e ainda não consegui...
 
Para os interessados, estou a desenvolver a versão 2.0 desta classe, que passou a ser "mais aplicação", pois estou a desenhar um interface para consulta do XML.

Esta versão ainda estará um bocado básica em termos de histórico, porque só irá ler um único XML, no futuro pretendo guardar um histórico de cada XML para a construcção de gráficos e análise de consumos ao longo do tempo, etc...

Aqui fica um preview do interface:
preview_vodafone.png
 
Back
Topo