Pogčedajte punu verziju : Automatsko logovanje
orangem
08. 04. 2008., 21:58
Da li neko ima dobar prijedlog, kako bi bilo najbolje da se automatski pristupi odredjenom sajtu, koristeci korisnicko ime i lozinku. A zatim da se pristupi nekoj stranici, unutar tog sajta i da se procita njen sadrzaj?
Dušan Dželebdžić
08. 04. 2008., 22:25
http://username:password@www.sajt.com/strana.html je prvo što mi pada na pamet, sa ovim obimom detalja koje si dao.
dinke
08. 04. 2008., 22:30
Pogledaj moju Curl klasu.
http://www.dinke.net/blog/2006/09/12/curl-http-client-2/sr/
Dakle, u najjednostavnije slucaju nesto tipa:
require_once("curl_http_client.php");
$curl = &new Curl_HTTP_Client();
//pretend to be IE6 on windows
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$curl->set_user_agent($useragent);
//where to store cookies
$cookies_file = "/tmp/cookies.txt";
$curl->store_cookies($cookies_file);
$curl->set_referrer("http://www.nekisajt.com/login.php");
$post_data = array();
$post_data['login'] = 'pera';
$post_data['pass'] = 'joe';
$post_data['nesto_trece'] = 'jos jedna post varijabla';
//...
$html_data = $curl->send_post_data("http://www.nekisajt.com/login.php", $post_data);
//parsujes recimo sa preg_match $html_data i uzmes sta ti treba
...
Inace, toplo preporucujem "tamper data" extenziju, odlicna je za pracenje sta se od post varijabli salje sa strane na stranu.
orangem
08. 04. 2008., 22:33
U pitanju je obicna login forma;
<input type="text" name="username">
<input type="password" name="pass">
Method = POST
jablan
08. 04. 2008., 22:35
Ako koristiš Ruby (što je malo verovatno), imaš izvanrednu biblioteku Mechanize (http://mechanize.rubyforge.org/mechanize/).
Sledeći primer uploaduje sliku na Flickr:
require 'rubygems'
require 'mechanize'
agent = WWW::Mechanize.new
# Get the flickr sign in page
page = agent.get('http://flickr.com/signin/flickr/')
# Fill out the login form
form = page.forms.name('flickrloginform').first
form.email = ARGV[0]
form.password = ARGV[1]
page = agent.submit(form)
# Go to the upload page
page = agent.click page.links.text('Upload')
# Fill out the form
form = page.forms.action('/photos_upload_process.gne').first
form.file_uploads.name('file1').first.file_name = ARGV[2]
agent.submit(form)
Obratite pažnju na liniju "page = agent.click page.links.text('Upload')", koja "klikće" na link na stranici koji sadrži tekst Upload. Kudikamo lakše nego ručno petljanje sa kukijima... ;)
dinke
08. 04. 2008., 23:20
U pitanju je obicna login forma;
<input type="text" name="username">
<input type="password" name="pass">
Method = POST
onda samo zameni
$post_data['login'] = 'pera';
$post_data['pass'] = 'joe';
u mom primeru sa
$post_data['username'] = 'pera_ili_sta_vec';
$post_data['password'] = 'ovde_ide_pass';
i imaces sadrzaj strane u $html_data (naravno promeni i link za poziv strane umesto http://www.nekisajt....).
Nakon uspesnog logovanja (a to mozes proveriti sa jednim strpos), neku drugu stranu unutar sajta ucitas sa:
$html_neke_strane = $curl->fetch_url("http://www.nekisajt.com/neka_strana");
Inace, posto ovo radim gotovo svakodneno (ukljucujucu "unofficial" API za regovanje nekih cctld domena), mozda napisem i jedan tutorijal kako se to radi ;)
ivanhoe
09. 04. 2008., 02:51
Dinke bre, a secret handshakes i tajne zanata, nemoj bre da nam kvaris posao :)))
orangem
09. 04. 2008., 15:35
Dinke, hvala ti. Ovo radi super!
mega023
11. 04. 2008., 22:49
onda samo zameni
$post_data['login'] = 'pera';
$post_data['pass'] = 'joe';
u mom primeru sa
$post_data['username'] = 'pera_ili_sta_vec';
$post_data['password'] = 'ovde_ide_pass';
i imaces sadrzaj strane u $html_data (naravno promeni i link za poziv strane umesto http://www.nekisajt....).
Kada uradim post na php fajl u njemu nema klasicnog output-a vec ima header(Location: ...) tj. redirekciju na odredjeni link, pa mi je output od curl-a uvek string(0) "" i onda ne vidim da li je "uspelo" ili ni je...
Moze li se iscitati taj header ili "pratiti" taj url?
dinke
11. 04. 2008., 23:59
^Verovatno ti je output zapravo boolean false posto curl klasa sama handluje server side redirekcije. Prema tome, uradi var_dump izlaza da vidis sta ti vraca (most likely false jer nesto nisi uradio kako treba).
mega023
12. 04. 2008., 00:50
kaze
Error message: The requested URL returned error: 404 bool(false)
I ako sada radi (postuje) samo sto mi je sad problem jer nemam pouzdan podatak da li je uspelo jer mi vraca 404.
Mislim da je problem u tome sto redirekt ide na link formata
http://www.domen.com/nesto.html#lokacija
e sad mozda curl ne konta bas nakjoblje to #lokacija pa se buni,
jer mi u browseru ista stvar radi ok...
dinke
12. 04. 2008., 01:04
Pa naravno da nije uspelo, verovatno ti je sama post strana pogresna.
orangem
13. 04. 2008., 00:49
Ima li neki poseban razlog, zasto se u browseru ne prikazuje sadrzaj stranice nakon ovog dijela koda:
$curl = &new Curl_HTTP_Client();
Npr.
<?php
require_once("curl_http_client.php");
print "OVO SE ISPISE";
$curl = &new Curl_HTTP_Client();
print "OVO NE!";
?>
Sa komandne linije vidim sve, ali ako skriptu pozivam preko IE ili Firefoxa, vidim samo blank page ili eventualni tekst prije kreiranja objekta.
:1092:
ivanhoe
13. 04. 2008., 14:39
pogledaj error log od servera da vidis koja je greska...
orangem
13. 04. 2008., 18:04
Odmah sam pogledao log, ali nema greske.
Sa komandne linije radi bez problema, sve se vidi.
Ali se u browseru ne prikazuje.
ivanhoe
13. 04. 2008., 20:15
hmmm, a da ne predje skripta memory limit ? Ako imas priviligije probaj da ga povecas u php.ini na neku solidno veliku vrednost, pa vidi da li ce da proradi (pa onda vrati na neku normalnu vrednost)
dinke
13. 04. 2008., 20:34
Meni pre lici da nemas curl podrsku na tom serveru.
Dakle stavi ovo na pocetak fajla:
ini_set(display_errors, "1");
error_reporting(E_ALL);
pa javi da li imas neku promenu u ispisu.
orangem
15. 04. 2008., 23:52
Izgleda da je problem bio kod apache-a, upravo sam ga restartovao i sada sve radi normalno.
Btw. da nisam imao php curl podrsku, ne bi radilo sa komandne linije.
Kako god bilo, nadam se da se ovo nece ponoviti:)
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.