Dobry den.
Chci s pouzitim file_get_contents vypsat text ze vzdaleneho serveru (resp. text ze zdrojaku), kdyz ten text jde zobrazit jen pokud se tam clovek prihlasi a klikne na odkaz. Potreboval bych nejak PHPckem se na serveru prihlasit pres promenne v adrese (jmeno a heslo znam samozrejme) a pak jeste otevrit tu druhou stranku, jenze tam uz jakoby prihlaseny nejsem - lze takhle nejak prenaset session?
Pokud jste nepochopili, ctete dale...
Na cizim serveru se normalne prihlasim a kliknu na Informace, coz jde jen u prihlasenych. Kdyz pouziju
file_get_contents('http://www.server.cz/index.php?jmeno=123&heslo=123')
file_get_contents('http://www.server.cz/index.php?informace')
tak se druhy radek pokusi nacist stranku informace, ale neni tam prihlasenej, takze to nejde... musely by se tam nejak prenest informace o session a o prihlaseni...
Jestli ten server povoluje přenos session id v URL, zjistíš ho v jakýmkoliv odkazu v tom, co ti pošle ten přihlašovací požadavek.
Řešil jsem to pro server, kterej požadoval cookies - udělal jsem to přes socket a snažil se chovat jako browser, ale tady na wz je to zakázaný.
A nebo možná http://cz2.php.net/manual/cs/ref.curl.php, ale to jsem nikdy nezkoušel.
Krab
mohol by si dat sem ten zdrojak ako si to robil so socket?diky moc :o)
mydlo: Zdrojáky momentálně nemám, ale bylo to nějak takhle:
//otevřeš spojení se serverem na portu 80
//sepíšeš požadavek
$pozadavek= "POST /stranka HTTP/1.1
Host: www.server.cz
Můžeš sem dát i referer
Content-Type: application/x-www-form-urlencoded
Content-Length: délka řetězce proměnná=hodnota&proměnná=...
promenna=hodnota&prom2=hodnota2"; //jako v url
//a pak píšeš jako do souboru
fputs($spojeni, $pozadavek);
//odpověď si přečteš taky ze souboru
while (!feof($spojeni)) {
$radek = fgets ($spojeni,1000);
if($radek == "\r\n") break; //hlavičky končí prázdným řádkem
// v jednom nebo více řádcích bude něco jako Set-Cookie: promenna=xyz123; path=něco
// promenny a hodnoty si zapamatujes
}
//zavres spojeni
//otevres ho znovu
$pozadavek = "GET /stranka HTTP/1.1
Host: www.server.cz
Můžeš zase referer
Cookie: promenna=xyz123";
fputs($spojeni, $pozadavek);
//a už by to mělo vracet správnou stránku i s hlavičkou
while (!feof ($spojeni)) {
$buffer = fgets($spojeni, 4096);
echo $buffer;
}
Dik, a co ma byt to $spojeni?
A jeste: misto:
POST /stranka HTTP/1.1
Host: www.server.cz
Můžeš sem dát i referer
Content-Type: application/x-www-form-urlencoded
Content-Length: délka řetězce proměnná=hodnota&proměnná=...
ma byt URL adresa toho prihlasovaciho skriptu, a misto:
GET /stranka HTTP/1.1
Host: www.server.cz
Můžeš zase referer
Cookie: promenna=xyz123
url stranky, ktera ma byt zobrazena a co uz dostane session?
$spojeni je deskriptor, který dostaneš, když otevíráš socketové spojení
$spojeni = fsockopen(...);
Prvním požadavkem odesíláš vyplňený přihlašovací formulář a druhým dostaneš stránku i s HTTP hlavičkou.