0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 18

Отправка файла с использованием сокетов

01.04.2016, 20:20. Показов 1289. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую,

Функция:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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=423fa8 54&hash=b79c7ceb69738bc8d3dc&swfupload=1 &api=1
(это GET параметры, не знаю как они называются)


CURL не предлагать, он с большими файлами работать вообще не умеет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2016, 20:20
Ответы с готовыми решениями:

Отправка сокетов
Пытаюсь через сокеты просто "открыть" страничку на локальном сайте (запущен через Apache). При открытии странички должен создаваться...

Отправка сокетов
Здравствуйте. Есть 2 приложения на андроид устройство, клиент и сервер. Клиент отправляет сообщение серверу по локальному адресу при помощи...

Прием и отправка сообщений с использование сокетов
Здравствуйте. Нашел в интернете образец кода сервера который оказался бы для меня весьма полезным. Проблема в том что я не могу понять в...

1
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
01.04.2016, 21:11
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$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']) . '?' .  ($parsed['query'])) , $filePath, $fileField);
 
var_dump($result);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2016, 21:11
Помогаю со студенческими работами здесь

Отправка сокетов в виде массивов по UDP-протоколу
Читающим доброе время суток, вот хочу обратиться за помощью. Суть проблемы состоит в отправка сокетов в виде массивов по...

Чат с использованием сокетов
в общем по заданию лабы необходимо разработать чат с использованием сокетов ,всё реализовал,работает,как часы,НО...Препод сказал добавить...

Возможна ли отправка письма с использованием bat-файла без использования сторонних программ?
Добрый день, возможна отправка письма без сторонних программ? в bat через bat файл?

Запись с использованием QMediaRecorder в файл *.wav и отправка этого файла на адрес http://
На отправку на веб-адрес не обращайте внимание (забыл стереть) Нужно записать звук с микрофона в wav (а лучше сразу в flac) файл с...

Написать сервер с использованием сокетов
Ребята, нужно написать сервер за неделю на си++ с использованием сокетов, а я в этом вообще не понимаю ничего. Помогите литературой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru