<?php
/*
*Upload файла на kmx.ru через socket
*автор: nc_soft
*28.08.07
*/
/*для uploada нам потребуется изучить структуру форм и заголовки по адресу
http://wap.kmx.ru/upload
после изучения страницы можно заметить, что чтобы попасть на форму с аплоадом,
необходимо всего лишь послать такую куку
uploadkey=284891272; expires=Thu, 31-Dec-2009 21:00:00 GMT
(где цифры как вы правильно догадались это секретный ключ), далее изучаем саму форму и
приходим к выводу, что необходимо послать следующие данные:
dir (имя директории в которую сохранить)
file1 (первый файл)
file2 (второй файл) итд*/
//имя директории в которую грузим
$dir='/';
//имя пересылаемого файла
$file_name = 'example.jar';
//MIME тип пересылаемого файла
$application = 'application/java-archive';
//запись файла в переменную
$bufer = file_get_contents('./example.jar');
//имя поля формы для файла
$form_file_name = 'file1';
//генерация разделителя
$boundary = md5(time());
//формируем POST данные
$post_str = '';
$post_str .= "--$boundary\r\n";
$post_str .="Content-Disposition: form-data; name=\"dir\"\r\n\r\n";
$post_str .= "$dir\r\n";
//формируем отправку файла
$post_str .= "--$boundary\r\n";
$post_str .= "Content-Disposition: form-data; name=\"$form_file_name\"; filename=\"$file_name\"\r\n";
$post_str .= "Content-Type: $application\r\n";
$post_str .= "Content-Transfer-Encoding: binary\r\n\r\n";
$post_str .= "$bufer\r\n";
$post_str .= "--$boundary--\r\n";
//сайт
$host='wap.kmx.ru';
//обработчик формы
$path='/upload';
//открываем сокет
$fp = @fsockopen("tcp://".$host, 80, $errno, $errstr, 10);
if (!$fp)
{
die($errstr.':'.$errno);
}
else
{
$header = "POST $path HTTP/1.0\r\n";
$header .= "Host: $host\r\n";
//подделываем кукис
$header .= "Cookie: uploadkey=284891272; expires=Thu, 31-Dec-2009 21:00:00 GMT\r\n";
//указываем что это пост данные с вложенным файлом
$header .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
$header .= "Content-Length: ".strlen($post_str)."\r\n\r\n";
//посылаем данные
fwrite($fp, $header.$post_str);
$headers='';
//читаем заголовки
while ($str = trim(fgets($fp, 4096)))
$headers .= "$str\n";
$body='';
//читаем ответ
while (!feof($fp))
$body.= fgets($fp, 4096);
//закрываем сокет
fclose($fp);
}
//выводим данные
echo $headers.'<hr/>'.$body;
?>