Помогите, пожалуйста, решить задачу: есть такой форум phpbb, у него есть возможность закрывать разделы для разных уровней пользователей. Как на php вытащить и сохранить закрытую страницу, без использования браузера, если есть юзер/пасс имеющего туда доступ?
ты 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; }
... $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 ); ...
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 юзают там где юзер чтото отправляет на сервер. Хотя в любом случае ответом сервера будет результат работы скрипты\чегото ещё...
что я неправильно делаю? <? $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);
первый файл (test1) до строки с <form второй (test2) - его продолжение третий вообще пустой а должно быть: в первом форма на логон, во втором - авторизация успешна, в третьем закрытая страница что здесь неверно? как исправить? подскажите, пожалуйста, а то уже неделю над этим бьюсь
ну ваще... я с мануалов начал, если б там ВСЁ было написано, я б уже сделал давно... <? $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); ?> вот это у меня работает, когда я кук сюда копирую из браузерного а как мне залогиница и получить свежий кук? ну не получается у меня пройти по нескольким страницам! неужто так трудно помочь?