Problema ca cURL

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

mpop
PHPRomania Supporter
Mesaje: 16
Membru din: Dum Aug 02, 2009 12:58 pm

Problema ca cURL

Mesajde mpop » Joi Iun 24, 2010 3:22 pm

Buna.
Incerc sa fac un script care se logheaza pe un site si verifica daca am primit un email. Codul ar arata cam asa :

Cod: Selectaţi tot

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION , true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "http://unsite/login.php");
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=user&pass=pass");
$xxx = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://unsite/email.php");
$xxx = curl_exec($ch);
$finda = preg_match("/Email<b>(.*?)<\/b>/",$xxx,$ress);
$wave_file = "alert";
echo $ress[1] >= 1 ? $ress[1]."<EMBED SRC=\"$wave_file.wav\" HIDDEN=\"TRUE\" AUTOSTART=\"TRUE\"></EMBED>"."<br />" : "no email";

Problema ii ca vreau sa verifice o data la un minut si daca rulez script de fiecare data la un minut apare pe acel site ca ma loghez tot la un minut, ce ar parea probabil o tentativa de hacking.
Cum as putea sa fac sa ruleze doar partea asta de cod la un interval de timp.

Cod: Selectaţi tot

curl_setopt($ch, CURLOPT_URL, "http://unsite/email.php");
$xxx = curl_exec($ch);
$finda = preg_match("/Email<b>(.*?)<\/b>/",$xxx,$ress);
$wave_file = "alert";
echo $ress[1] >= 1 ? $ress[1]."<EMBED SRC=\"$wave_file.wav\" HIDDEN=\"TRUE\" AUTOSTART=\"TRUE\"></EMBED>"."<br />" : "no email";

Am incercat ceva cu ajax dar tot la fel, se logheaza de fiecare data. Practic vreau sa se logheze iar apoi sa isi dea un refresh la pagina, la un interval de timp si apoi sa verifice daca am primit un mail.



alex.andrei
Junior Member
Mesaje: 49
Membru din: Vin Apr 09, 2010 12:41 am

Mesajde alex.andrei » Joi Iun 24, 2010 4:51 pm

vrei neaparat cu php ?
vrei neaparat cu cURL ?

uite o clasa grasa care face ce vrei tu
http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html

daca serverul de mail e pop3 ai niste comenzi telnet foarte misto (daca sunt suportate bineinteles) cu care poti sa vezi daca ai mesaje noi, sa le citesti, sa le stergi ...

daca vrei neaparat cu cURL:
te loghezi odata, dai cu user si pass in pagina de logare,
apoi dai fara nici o variabila in pagina de inbox, nu pui codul cu care te-ai logat intr-un ciclu.
chestia e ca nu cred ca o sa mearga .. web-mail-urile de obicei vor cookis

pune aici daca merge :D

mpop
PHPRomania Supporter
Mesaje: 16
Membru din: Dum Aug 02, 2009 12:58 pm

Mesajde mpop » Joi Iul 08, 2010 2:36 am

Mersi de sfaturi. Am incercat dar nu merge cum vroiam, si da logarea e pe baza de cookie. Oricum cred ca am gasit o alta metoda, si anume acest cod:

Cod: Selectaţi tot

//code pt logare

$ch = curl_init();
curl_setopt...

//apoi creez o bluca continua de genu

ignore_user_abort(1); // run script in background
set_time_limit(0); // run script forever
$interval=60*1; // do every 1 minute...
do{

==si aici codul pentru verificarea daca am mail
== si introduc datele gasite intro baza de date

   sleep($interval); // wait 1 minute
}while(true);


Si voi face o alta pagina care va avea auto refresh o data la minut care sa verifice in baza de date daca am primit mail sau nu. Din cate ma gandesc ar trebui sa se logheze o singura data, voi ce ziceti?

Bamselu
Average Member
Mesaje: 55
Membru din: Mie Oct 29, 2008 11:13 pm
Localitate: Bucuresti
Contact:

Mesajde Bamselu » Joi Iul 08, 2010 4:59 am

mpop scrie: Oricum cred ca am gasit o alta metoda, si anume acest cod:

Cod: Selectaţi tot

//code pt logare

$ch = curl_init();
curl_setopt...

//apoi creez o bluca continua de genu

ignore_user_abort(1); // run script in background
set_time_limit(0); // run script forever
$interval=60*1; // do every 1 minute...
do{

==si aici codul pentru verificarea daca am mail
== si introduc datele gasite intro baza de date

   sleep($interval); // wait 1 minute
}while(true);



Tot acolo ajungi si cu sleep.

Nu am vorbele tehnice la mine, dar ideea e cam asa:
tu faci preg_match pe un string returnat de curl_exec($ch), practic pb ta e ca tre sa faci refresh la string fara sa te loghezi dar cand faci curl_exec($ch) include si partea in care faci login.

mpop
PHPRomania Supporter
Mesaje: 16
Membru din: Dum Aug 02, 2009 12:58 pm

Mesajde mpop » Joi Iul 08, 2010 1:41 pm

Deci, ca sa inteleg bine sa luam de exemplu bucatica asta de cod:


curl_setopt($ch, CURLOPT_URL, "http://unsite/login.php");
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=user&pass=pass");
$xxx = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://unsite/email.php");
$xxx = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://unsite/email.php");
$xxx = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://unsite/email.php");
$xxx = curl_exec($ch);

Liniile ce leam subliniat, de fiecare data repeta si partile dinaintea lor? Adica la prima linie subliniata face din nou logarea si apoi cere pagina "http://unsite/email.php", la a doua linie subliniata face logarea si cere de doua ori pagaina "http://unsite/email.php", si asa mai departe?


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 31 vizitatori