Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Веселая карусель

S. Andrey (sandrey@vens.ru)

Хакер, номер #077, стр. 077-056-3


Если взятая страница не призовая, то скрипт немедленно (вызов flush()) отдает web-серверу номер нашей ссылки. Зачем это нужно? А вот зачем: помнишь, в самом начале мы вызывали set_time_limit(0), чтобы PHP не грохнул наш скрипт по причине его длительного времени выполнения? Так вот – это только необходимое условие, но не достаточное. Дело в том, что если скрипт не будет отдавать web-серверу никаких данных для передачи пользователю, то web-сервер по своему таймауту прикроет этот скрипт (причем без какого-либо сообщения об ошибке – браузер напишет пользователю, что документ успешно загружен). Так вот – что бы этого не случилось, наш бот должен периодически отдавать что-нибудь web-серверу. Много отдавать не надо, т.к. web-сервер все это будет передавать пользователю, а это трафик, который мы минимизируем. Я решил выводить на экран номер строки URL'а в файле links.php. Что будешь выводить ты – решай сам, помни только о минимизации трафика. Теперь настало время вернуться к функции postData():

Функция, за клиента “отправляющая форму” на сервер

function postData($idb, $numb, $ball, $user_id, $host = 'www.******.ru', $port = 80) {

$params = "--1BEF0A57BE110FD467A\r\n".

"Content-Disposition: form-data; name=\"idb\"\r\n".

"\r\n".$idb."\r\n".

"--1BEF0A57BE110FD467A\r\n".

"Content-Disposition: form-data; name=\"numb\"\r\n".

"\r\n".$numb."\r\n".

"--1BEF0A57BE110FD467A\r\n".

"Content-Disposition: form-data; name=\"mybal\"\r\n".

"\r\n".$ball."\r\n".

"--1BEF0A57BE110FD467A\r\n".

"Content-Disposition: form-data; name=\"id\"\r\n".

"\r\n".$user_id."\r\n".

"--1BEF0A57BE110FD467A--\r\n";

$post = "POST http://".$host."/addbal.php HTTP/1.0\r\n".

"Host: $host\r\n".

"Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n".

"Content-Length: ".strlen($params)."\r\n\r\n".

"$params\r\n\r\n";

$fp = fsockopen($host, $port, $errno, $errstr, 5);

if(!$fp){ echo "$errstr ($errno)<br>\n"; } else{

fputs($fp, $post);

fclose($fp);

} }

Работает она довольно просто. Первым делом устанавливаем соединение, открывая сокет, и записываем в него наш POST-запрос. А вот формат этого запроса, как и всу функцию postData(), я тебе настоятельно рекомендую проштудировать и юзать в дальнейшем. Дело в том, что, например, в хелпе к PHP написана другая функция, с помощью которой можно отправить на сервер данные методом POST, но у меня она не заработала. Зато функция, которую я написал самостоятельно, меня еще ни разу не подводила.

Назад на стр. 077-056-2  Содержание  Вперед на стр. 077-056-4