Просмотр полной версии : PHP Cookies & Sessions
MiZtEriX
12.07.2005, 09:02
Помогите, пожалуйста, решить задачу:
есть такой форум phpbb, у него есть возможность закрывать разделы для разных уровней пользователей. Как на php вытащить и сохранить закрытую страницу, без использования браузера, если есть юзер/пасс имеющего туда доступ?
Почему невозможно использование броузера?
MiZtEriX
12.07.2005, 09:49
А как его использовать, чтоб он сам запустился, авторизовался, скачал, сохранил и закрылся?
ну тогда кури perldoc LWP::UserAgent
MiZtEriX
12.07.2005, 09:59
насчёт самозапуска, эт я неправ...
а вот кросплатфоменность нужна (вин и фря)
MiZtEriX
12.07.2005, 10:07
эээ... перл? а на пхп нельзя?
перл вообще не знаю :(
на пхп fsockopen() и его команда =)
ты fsockopen() знаешь?
ну так вот, попроси сервера прислать тебе страничку, неважно динамическая она или HTML. Отправь заголовки (смотрит на меня большими глазами и молчит...)
Ну блин...
$sock = fsockopen( $server, $port );
$request = "GET http://".$server.$url." HTTP/1.1\n";
$request .= "Host: ".$server."\n";
$request .= "User-Agent: вставь сюда агент\n";
$request .= "Connection: Keep-Alive\n";
fwrite( $sock, $request );
while ((!feof( $sock )) && ($l = fgets( $sock )))
{
// answer
print $l;
}
MiZtEriX
12.07.2005, 12:40
получил страничку с формой и куки
а как отпостить переменные формы и куки?
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
http://rfc.net/rfc2616.html
а как отпостить переменные формы и куки?
...
$content = "value1=1&value2=2&value3=3&blablabla=blabla\n";
$request = "POST http://".$server.$url." HTTP/1.1\n";
$request .= "Host: ".$server."\n";
$request .= "User-Agent: вставь сюда агент\n";
$request .= "Connection: Keep-Alive\n";
$request .= "Content-Type: text/html\n";
$request .= "Content-Length: ".strlen($content)."\n";
$request .= "\n".$content."\n";
fwrite( $sock, $request );
...
точнее лутше Connection: Close
MiZtEriX
12.07.2005, 14:49
The POST method is used to request that the origin server accept the
entity enclosed in the request as a new subordinate of the resource
identified by the Request-URI in the Request-Line. POST is designed
to allow a uniform method to cover the following functions:
.....
а на практике это как всё?
вам не очень трудно написать?
а на практике это как всё?
вам не очень трудно написать?
ну а я тебе че написал? вверху почитай - на PHP написано.
а если хочешь попрактиковаться - сделай так. скачай InetCrack+Naviscope (http://antichat.ru/inetcrack/)
и включи naviscope. теперь через IE залезь куданить и naviscope тебе покажет
какие твой браузер отправлял заголовки. а вручную их удобно отправлять InetCrack'ом
а вообще может быть тебе интересно зачем нужен GET и POST ?
так вот. когда ты пишешь в адресной строке
http://porno.com/script.php?parameter=1
тоданные из parameter передаются методом GET. тоесть в прямо в адресной строке
например script.php?a=1&b=1&c=2&d=32
Тоесть они передаются в ЗАГОЛОВКЕ HTTP запроса :
GET http//.../script.php?parameter=1 HTTP / 1.1
...
А POST метод передает данные в ТЕЛЕ запроса, их невидно в адресной строке:
GET http://script.php HTTP / 1.1
...
Content-Type: тип mime
Content-Length: размер тела
parameter=1&a=1&b=2...
Ясно стало?
Часто POST юзают там где юзер чтото отправляет на сервер.
Хотя в любом случае ответом сервера будет результат работы скрипты\чегото ещё...
MiZtEriX
12.07.2005, 15:21
<?
$file=fopen("test1.htm","w");
$url = "/index.php?pid=4";
$server = "csport";
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)";
$fp = fsockopen("csport", 80, $errno, $errstr, 30);
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
$out = "GET http://".$server.$url." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!$flag) {
$line = fread($fp,32000);
if (strstr($line, "Set-Cookie: _data")){$cukdata = substr($line, 12, sizeof($line));}
if (strstr($line, "Set-Cookie: _sid")){$cuksid = substr($line, 12, sizeof($line));}
$form=strstr($line,"<form");
if ($form){$flag=1;}
fputs ($file,$line);
}
}
fclose($file);
$file=fopen("test2.htm","w");
if ($form<>'') {
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
echo "form finded - login\r\n\r\n";
$content = "username=test&password=test&autologin=checked&redirect=portalhome&submit=Login";
$out = "POST http://".$server."/f/login.php?login=true&sid=".$cuksid." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Cookie: ".$cukdata."\r\n";
$out .= "Cookie: ".$cuksid."\r\n";
$out .= "Content-Type: text/html\n";
$out .= "Content-Length: ".strlen($content)."\n";
$out .= "\n".$content."\n";
$out .= "Connection: Close\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)) {
$line = fread($fp,32000);
if (strstr($line, "Set-Cookie: _data")){$cukdata = substr($line, 12, sizeof($line));}
if (strstr($line, "Set-Cookie: _sid")){$cuksid = substr($line, 12, sizeof($line));}
fputs ($file,$line);
}
}
}
fclose($file);
$file=fopen("test3.htm","w");
if ($form<>'') {
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
echo "get page\r\n\r\n";
$out = "GET http://".$server.$url." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Cookie: ".$cukdata."\r\n";
$out .= "Cookie: ".$cuksid."\r\n";
$out .= "Connection: Close\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)) {
$line = fgets($fp);
fputs ($file,$line);
}
}
}
fclose($file);
fclose($fp);
MiZtEriX
14.07.2005, 12:50
первый файл (test1) до строки с <form
второй (test2) - его продолжение
третий вообще пустой
а должно быть: в первом форма на логон, во втором - авторизация успешна, в третьем закрытая страница
что здесь неверно? как исправить? подскажите, пожалуйста, а то уже неделю над этим бьюсь :(
тем кто так пишет скрипты надо давать по шее.
MiZtEriX
15.07.2005, 12:53
я ж и спрашиваю, как надо?
Надо правильно.
Мануал по пхп и Rfc 2616 в зубы и вперед на мины ;)
MiZtEriX
15.07.2005, 16:54
ну ваще... я с мануалов начал, если б там ВСЁ было написано, я б уже сделал давно...
<?
$fp = fsockopen("csport", 80, $errno, $errstr, 30);
$file=fopen("test.htm","w");
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
$out = "GET http://csport/index.php?pid=4 HTTP/1.1\r\n";
$out .= "Accept: */*
Referer: http://csport/
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)
Host: csport
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: data=a%3A2...........%7D
";
fputs($fp, $out);
while (!feof($fp)) {
$line = fgets($fp);
fputs ($file,$line);
}
echo "ok";
}
fclose($file);
fclose($fp);
?>
вот это у меня работает, когда я кук сюда копирую из браузерного
а как мне залогиница и получить свежий кук? ну не получается у меня пройти по нескольким страницам! неужто так трудно помочь?
помочь не трудно, трудно делать работу за тех, кто не хочет сам ничего делать и ждет подачки
ладно, я помогу, дав тебе прямую ссылку на самый полный мануал:
http://rfc.net/rfc2616.html
MiZtEriX
15.07.2005, 18:40
это не помощь, послать читать мануалы может каждый...
и ссылка не на мануал, а на спецификацию
там не написано то, о чём я спрашиваю
и сам я делаю многое, подачек не жду...
кстати, подачку легче словить, чем обычных разьяснений/помощи добиться...
сказал бы просто, что лень, а то "трудно делать работу"...
это не помощь...
А что ты ждал?
и не мануал...
Не надо вот! Это самое полное описание.
там не написано то, о чём я спрашиваю
то, что ты спрашиваешь, там написано, так как это полное описание.
и вобще, тебе уже кез на прошлой странице подобный листинг дал
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot