Как отправить файл по HTTP?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Как отправить файл по HTTP?

Сообщение Mihail_ » 28.06.2009 (Вс) 19:43

Здравствуйте, нужно отправить файл по http протоколу, для этого есть принимающая php функция на стороне сервера
Помогите пожалуйста

Код php функции:

upload.php
Код: Выделить всё
<html>
<head>
  <title>Результат загрузки файла</title>
</head>
<body>
<?php
   if(copy($_FILES["filename"]["tmp_name"],
     "/usr/local/www/data-dist/mihail/".$_FILES["filename"]["name"]))
   {
     echo("Файл успешно загружен <br>");
     echo("Имя файла: ");
     echo($_FILES["filename"]["name"]);
     echo("<br>Размер файла: ");
     echo($_FILES["filename"]["size"]);
    } else {
      echo("Ошибка загрузки файла");
   }
?>
</body>
</html>


index.html
Код: Выделить всё
<html>
<head>
  <title>Загрузка файлов на сервер</title>
</head>
<body>
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br>
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>


Возможно ли для этих целей использовать например WinHttp?

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 28.06.2009 (Вс) 20:34

Используй компонент WebBrowser, заполняешь file и програмно нажимаешь на кнопку submit
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 28.06.2009 (Вс) 21:00

А вообще если есть доступ к серверу, то может лучше передавать через сокет?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Dimen
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 25.05.2009 (Пн) 15:10

Re: Как отправить файл по HTTP?

Сообщение Dimen » 29.06.2009 (Пн) 5:58

JohnK как бы сказал Хакер ты советуешь ерунду!
У такокй формы нету
Код: Выделить всё
value=""
и заполнить ни чего не получится, это бы была дыра в безопасности. Загрузка произойдет только в том случае если сам человек укажет файл который загружать!
Пусть человек не парится с этим скриптом ни чего у него через него не получится, можно переделать php и отправлять просто текс закодированной картинки на сервер а по средством php его принимать и раскодировать и записывать в картинку.
Ответ использовать FTP или сокеты.
Íå óïóñêàéòå øàíñ!

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как отправить файл по HTTP?

Сообщение Joo » 29.06.2009 (Пн) 10:15

Dimen писал(а):JohnK как бы сказал Хакер ты советуешь ерунду!
У такокй формы нету
Код: Выделить всё
value=""
и заполнить ни чего не получится, это бы была дыра в безопасности. Загрузка произойдет только в том случае если сам человек укажет файл который загружать!
Пусть человек не парится с этим скриптом ни чего у него через него не получится, можно переделать php и отправлять просто текс закодированной картинки на сервер а по средством php его принимать и раскодировать и записывать в картинку.
Ответ использовать FTP или сокеты.


Согласен нету Value, но автоаплоадеры существуют! При чем автоматом аплоадят не только на сайты где это(автоаплоад) предусмотренно изначально
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как отправить файл по HTTP?

Сообщение alibek » 29.06.2009 (Пн) 10:32

Только файл выбирается все-равно вручную, пользователем.
Lasciate ogni speranza, voi ch'entrate.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 30.06.2009 (Вт) 1:01

Хмм.. А как тогда автоматические заполнялки это делают?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как отправить файл по HTTP?

Сообщение iGrok » 30.06.2009 (Вт) 1:03

JohnK писал(а):Хмм.. А как тогда автоматические заполнялки это делают?

Какие?
label:
cli
jmp label

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 30.06.2009 (Вт) 1:30

Тот же RoboForm...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Как отправить файл по HTTP?

Сообщение karlex » 30.06.2009 (Вт) 6:51

"Автоматические заполнялки", скорее всего, сами полностью формируют HTTP запрос отвечающий требованиям формы.

Добавлено:
Блин, написал... Первая часть предложения противоречит последней.
"Автоматические заполнялки" конечно же заполняют формы, не знаю как им удастся укротить поле для выбора файла, но думаю наиболее разумно отправлять запросы серверу самостоятельно, вместо того чтобы использовать объектную модель страницы. (В данном случае)
Последний раз редактировалось karlex 30.06.2009 (Вт) 12:20, всего редактировалось 1 раз.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как отправить файл по HTTP?

Сообщение Joo » 30.06.2009 (Вт) 7:37

karlex писал(а):"Автоматические заполнялки", скорее всего, сами полностью формируют HTTP запрос отвечающий требованиям формы.


Вот! Правильно! Нужно вручную формировать HTTP запрос!
У меня где-то на .NET есть автоаплоадер, делал специально для аплоада видео-роликов на один сайт.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как отправить файл по HTTP?

Сообщение alibek » 30.06.2009 (Вт) 7:41

JohnK писал(а):Тот же RoboForm...

С каким пор RoboForm автоматически отправляет файлы?
Lasciate ogni speranza, voi ch'entrate.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 30.06.2009 (Вт) 12:09

Речь идет прежде об автозаполнении. Кстати, опера своим волшебным жезлом тоже заполняет форму.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как отправить файл по HTTP?

Сообщение iGrok » 30.06.2009 (Вт) 12:24

JohnK писал(а):Речь идет прежде об автозаполнении. Кстати, опера своим волшебным жезлом тоже заполняет форму.

Вообще-то, если ты не заметил, в теме речь идёт об отправке файла. А как раз этого-то автоаплоадеры делать и не умеют.
А заполнять форму - да. Не проблема.

UPD:
Конечно же, я не про автоаплоадеры, а про автозаполнялки типа AI RoboForm и иже с ним.
Последний раз редактировалось iGrok 30.06.2009 (Вт) 16:04, всего редактировалось 1 раз.
label:
cli
jmp label

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 30.06.2009 (Вт) 12:40

iGrok
Ты удивишься, но я заметил. Но по ходу рассмотрения темы возникают вопросы.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как отправить файл по HTTP?

Сообщение Joo » 30.06.2009 (Вт) 14:25

iGrok писал(а):
JohnK писал(а):Речь идет прежде об автозаполнении. Кстати, опера своим волшебным жезлом тоже заполняет форму.

Вообще-то, если ты не заметил, в теме речь идёт об отправке файла. А как раз этого-то автоаплоадеры делать и не умеют.
А заполнять форму - да. Не проблема.


Как это не умеют? Хорошо искал?
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Dimen
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 25.05.2009 (Пн) 15:10

Re: Как отправить файл по HTTP?

Сообщение Dimen » 30.06.2009 (Вт) 14:56

Похоже вы идете уже не в ту степь. Первоначально речь шла не об этом.
Íå óïóñêàéòå øàíñ!

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 30.06.2009 (Вт) 15:10

Почему не в ту степь? Если все таки окажется что можно заполнять, то мой пост становится актуальным. А он полностью соотвествует теме.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как отправить файл по HTTP?

Сообщение iGrok » 30.06.2009 (Вт) 16:03

Joo писал(а):
iGrok писал(а):
JohnK писал(а):Речь идет прежде об автозаполнении. Кстати, опера своим волшебным жезлом тоже заполняет форму.

Вообще-то, если ты не заметил, в теме речь идёт об отправке файла. А как раз этого-то автоаплоадеры делать и не умеют.
А заполнять форму - да. Не проблема.


Как это не умеют? Хорошо искал?

Тьфу. Ошибся. Я не про автоаплоадеры. Я про AI Roboform и иже с ним.

А автоаплоадеры, если они САМИ генерируют HTTP-запрос со всеми нужными полями, тогда конечно без проблем. Но "компонент WebBrowser" здесь вообще ни при чём. И заполнять поле типа "file" через него бесполезно.
label:
cli
jmp label

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Как отправить файл по HTTP?

Сообщение Joo » 30.06.2009 (Вт) 17:26

iGrok писал(а):Тьфу. Ошибся. Я не про автоаплоадеры. Я про AI Roboform и иже с ним.

А автоаплоадеры, если они САМИ генерируют HTTP-запрос со всеми нужными полями, тогда конечно без проблем. Но "компонент WebBrowser" здесь вообще ни при чём. И заполнять поле типа "file" через него бесполезно.


Да, WebBrowser здесь не помощник, в этом ты прав! Нужно просто изучить что шлет браузер в данном случае, и сымитировать это.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Как отправить файл по HTTP?

Сообщение djalex777 » 30.06.2009 (Вт) 18:33

Dimen писал(а):Пусть человек не парится с этим скриптом ни чего у него через него не получится, можно переделать php и отправлять просто текс закодированной картинки на сервер а по средством php его принимать и раскодировать и записывать в картинку.
Ответ использовать FTP или сокеты.

Вот ты советуешь человеку не советовать ерунды, а сам её и советуешь. Всё можно отправить и всё легко отправляется и принимается в php через $_FILES.
Mihail_
Можно использовать и WinHTTP. Читай про "Content-Type: multipart/form-data; boundary=", и, соответственно про "Content-Disposition: form-data; name="

Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Re: Как отправить файл по HTTP?

Сообщение Mihail_ » 30.06.2009 (Вт) 23:07

ребят, пожалуйста не надо отдаляться от темы, HTTP выбран не от балды - конечно проще использовать консольный фтп клиент и т.д. но это не вариант.. как не вариант навешивать тяжелый брайзер для этой задачи..

вот у нас есть код допустим для отправки GET запроса через WinHTTP
Код: Выделить всё
Dim http_req As New WinHttpRequest, results As String
http_req.Open "GET", "http://ya.ru"

http_req.SetRequestHeader "Content-Language", "ru"
http_req.SetRequestHeader "Content-Charset", "Windows-1251"
http_req.SetRequestHeader "Content-Encoding", "gzip, deflate"
http_req.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251"

http_req.SetRequestHeader "CACHE-CONTROL", "no-cache"
http_req.SetRequestHeader "CONNECTION", "Keep-Alive"
http_req.SetRequestHeader "USER-AGENT", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"

http_req.Send
     If http_req.Status = 200 Then
          results = http_req.ResponseText
          Debug.Print results
          Beep
     End If


Структура POST запроса насколько я знаю будет не очень сильно отличаться, какие-то заголовки здесь даже привели, спасибо.
Но как правильно передать локальный адрес файла на моем компьютере, чтобы php функция его приняла - этого я не знаю.. еще не знаю будет ли эта dll-ка заниматься отправкой непосредственно файла.. заложен ли в нее такой функционал?
буду признателен за ваши ответы

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как отправить файл по HTTP?

Сообщение MIT » 30.06.2009 (Вт) 23:19

Ты передавать будешь не локальный адрес файла, а его данные и имя в boundary-кодировке.
Простейшим гуглингом можно найти это: http://www.vbforums.com/showthread.php?t=337424
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Как отправить файл по HTTP?

Сообщение djalex777 » 01.07.2009 (Ср) 11:45

MIT писал(а):Ты передавать будешь не локальный адрес файла, а его данные и имя в boundary-кодировке.
Простейшим гуглингом можно найти это: http://www.vbforums.com/showthread.php?t=337424

В данном случаем Boundary - это просто разделитель, даже правильнее - границы данных. Никакой особой кодировки нету - просто передаем данные и имя файла (без пути) в том виде, в котором они и хранятся

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 01.07.2009 (Ср) 13:24

Никакой особой кодировки нету - просто передаем данные и имя файла (без пути) в том виде, в котором они и хранятся

А это тогда что?
http_req.SetRequestHeader "Content-Encoding", "gzip, deflate"


Как правило такие вложения передаются в Base64.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Как отправить файл по HTTP?

Сообщение djalex777 » 01.07.2009 (Ср) 16:30

JohnK писал(а):
Никакой особой кодировки нету - просто передаем данные и имя файла (без пути) в том виде, в котором они и хранятся

А это тогда что?
http_req.SetRequestHeader "Content-Encoding", "gzip, deflate"


Как правило такие вложения передаются в Base64.


Ошибаешься. Content-Encoding обозначает кодировку входящего потока, а не исходящего. В Base64 могут передавться некоторые параметры запроса, но совсем не по той причине, которую думаешь ты :) В случае с файлом Base64 нам не нужен.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 01.07.2009 (Ср) 16:48

Content-Encoding обозначает кодировку входящего потока, а не исходящего

Не кодировку, а метод кодирования(в нашем случае сжатия - gzip). gzip — утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм DEFLATE
Здесь мы указываем в каком кодировании мы передаем данные серверу. Заголовок формирует кто? Ты а не сервер, соответственно для сервера это будет входящий хидер.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Как отправить файл по HTTP?

Сообщение djalex777 » 02.07.2009 (Чт) 11:48

djalex777 писал(а):
JohnK писал(а):
Content-Encoding обозначает кодировку входящего потока, а не исходящего

Не кодировку, а метод кодирования(в нашем случае сжатия - gzip). gzip — утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм DEFLATE
Здесь мы указываем в каком кодировании мы передаем данные серверу. Заголовок формирует кто? Ты а не сервер, соответственно для сервера это будет входящий хидер.

Заголовок формируешь ты, для того чтобы сервер знал, что тебе возвращать. Сервер формирует Content-Encoding: gzip, или ещё что-нить в таком духе, только если ты ему отправишь Accept-Encoding: gzip. Если ты этого не сформируешь, то ответ от сервера придет тебе в несжатом виде. Зачем, когда ты отправляешь какие-либо данные указывать Content-Encoding в исходящем запросе? Что ты думаешь произойдет? :) А не насторожил ли тебя заголовок application/x-www-form-urlencoded? Для чего он? ;)

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: Как отправить файл по HTTP?

Сообщение JohnK » 02.07.2009 (Чт) 16:54

Ну исходя из поста стартера топика, сервер должен принимать файл, а не отсылать.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как отправить файл по HTTP?

Сообщение iGrok » 02.07.2009 (Чт) 18:09

JohnK писал(а):Ну исходя из поста стартера топика, сервер должен принимать файл, а не отсылать.

Я тут долго писал ответ о том, что ты не прав, что не нужно путать Request Headers и Response Headers и что тебе нужно курить RFC 2616...
А потом решил покурить его сам. Выяснилось, что ты таки прав.

Но!
Как-то там всё так неоднозначно прямо-таки.
Вот тут: http://www.w3.org/Protocols/rfc2616/rfc ... l#sec14.11 написано, что Content-Encoding - это всё-таки для Response Message.

Тем не менее, там есть фраза о том, что "If the content-coding of an entity in a request message is not acceptable to the origin server, the server SHOULD respond with a status code of 415 (Unsupported Media Type).". Т.е. вроде как появление этого хидера возможно и в Request Message.

В любом случае, я как-то пока не видел ни одного клиента, который бы отсылал что-либо на сервер в gzip. Видимо, просто потому, что не все серверы обязаны это поддерживать, и в ответ может прити "HTTP/1.1 415 Unsupported Media Type". И сервер будет прав.
label:
cli
jmp label

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 77

    TopList