Q_BASIC
Хранитель порядка
- Регистрация
- 30 Ноя 2013
- Сообщения
- 516
- Реакции
- 1.240
- Автор темы
- #1
Приветствую,
Функция:
Использование:
URL для отправки файла может быть разным. Последний был тот, что в коде.
Нам надо отправить постом файл на сервер ВКонтакте, передать параметры и всё это через https.
Сейчас получаю 400 Bad Request.
Как передать это: ?
CURL не предлагать, он с большими файлами работать вообще не умеет.
Функция:
PHP:
define("CRLF", "\r\n");
define("DCRLF", CRLF.CRLF);
function sendFile($host, $port="80", $path, $filePath, $fileField, $fields = array())
{
$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=\"".$fileField."\"".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($fp, fgets($fp2, 1024*100));
fclose($fp2);
fputs($fp, $fileHeadersTail);
$serverResponse = "";
while(!feof($fp)) $serverResponse .= fgets($fp, 4096);
fclose($fp);
return $serverResponse;
}
Использование:
PHP:
$url = 'https://cs513122.vk.me/upload.exe?act=add_video&mid=40420394&oid=-114117305&vid=456239806&fid=0&tag=423fa854&hash=b79c7ceb69738bc8d3dc&swfupload=1&api=1';
$filePath = DIR.'/cache/114117305/test.mp4';
$fileField = 'video_file';
$parsed = parse_url($url);
if($parsed['scheme'] === 'https'){
$protocol = 'ssl://';
$port = 443;
}
else
{
$protocol = '';
$port = 80;
}
$result = sendFile($protocol.$parsed['host'], $port, $parsed['path'], $filePath, $fileField);
var_dump($result);
URL для отправки файла может быть разным. Последний был тот, что в коде.
Нам надо отправить постом файл на сервер ВКонтакте, передать параметры и всё это через https.
Сейчас получаю 400 Bad Request.
Как передать это: ?
Код:
act=add_video&mid=40420394&oid=-114117305&vid=456239806&fid=0&tag=423fa854&hash=b79c7ceb69738bc8d3dc&swfupload=1&api=1
CURL не предлагать, он с большими файлами работать вообще не умеет.