Скрипт, отправляющий файлы методом POST

<?

# (c) Арсеньев Алексей( Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ) & Vyrus

# $host - Удаленный хост

# $port - Порт на удалённом хосте

# $path - Путь до страницы, которая принимает файл

# $filePath - Путь до файла, который отсылаем

# $fileField - Имя поля file на удаленном хосте

# $fields - Дополнительные поля. Пример array("email" => " Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ");



function sendFile($host$port="80"$path$filePath$fileName$fileField$fields = array())

{

  
define("CRLF""\r\n");

  
define("DCRLF"CRLF.CRLF);



  
$boundary "---------------------".substr(md5(rand(0,32000)),0,10);



  
$fieldsData "";



  if(
count($fields) > "0"):

  foreach(
$fields as $field => $value)

  {

    
$fieldsData .=  "--".$boundary.CRLF;

    
$fieldsData .=  "Content-Disposition: form-data; name=\"".$field."\"".DCRLF;

    
$fieldsData .=  urlencode($value).CRLF;

  }

  endif;



  
$fileHeaders "--".$boundary.CRLF;

  
$fileHeaders .= "Content-Disposition: form-data; name=\"".$fileField."\"; filename=\"".$fileName."\"".CRLF;

  
$fileHeaders .= "Content-Type: ".mime_content_type($filePath).DCRLF;

  
$fileHeadersTail CRLF."--".$boundary."--".CRLF;



  
$filesize filesize($filePath);

  
$contentLength strlen($fieldsData) + strlen($fileHeaders) + $filesize strlen($fileHeadersTail);



  
$headers  "POST $path HTTP/1.0".CRLF;

  
$headers .= "Host: ".$host.CRLF;

  
$headers .= "Referer: ".$host.CRLF;

  
$headers .= "Content-type: multipart/form-data, boundary=".$boundary.CRLF;

  
$headers .= "Content-length: ".$contentLength.DCRLF;

  
$headers .= $fieldsData;

  
$headers .= $fileHeaders;



  if(!
$fp fsockopen($host$port)) return false;

  
fputs($fp$headers);



  
$fp2 fopen($filePath"rb");



  while(!
feof($fp2)) fputs($fpfgets($fp21024*100));



  
fclose($fp2);



  
fputs($fp$fileHeadersTail);



  
$serverResponse "";

  while(!
feof($fp)) $serverResponse .= fgets($fp4096);

  
fclose($fp);



  return 
$serverResponse;

}

?>

Передача данных методом POST, является интереснейшей задачей: часто требуется подделка имени пользовательского агента (USER_AGENT), реферера (адреса предыдущей страницы), cookie и т.п.
 
« Предыдущая статья   Следующая статья »