На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Отправить файл на сервер
    Доброго времени суток! Как программно отправить файл на HTTP-сервер, не указывая при этом пароль. В PHP есть метод POST, позволяющий отправить файл на сервер, а чисто программно - это возможно?
    Сообщение отредактировано: salieri -
      И ФАК просмотреть лень?
      FTP
        B.V., в примере указывается пароль!!! А мне нужно без ввода пароля!!!
          Цитата salieri @
          B.V., в примере указывается пароль!!! А мне нужно без ввода пароля!!!

          с пустым паролем? :lol: Или с автоматическим пробрасыванием?
            Spawn.NET, скорее с автоматическим. т.к. нужно просто указать путь на сервер, файл и логин, а программа сама должна его перекинуть
            Сообщение отредактировано: salieri -
              это пипец.
                nash, Вы хотите сказать - это невозможно?? А как же PHP работает??
                  Нет, он говорит, что Вам лень самому разбираться...
                    Spawn.NET, я бы с радостью разобраться, только информации в интернете нет по этому поводу.
                      Цитата salieri @
                      т.к. нужно просто указать путь на сервер, файл и логин, а программа сама должна его перекинуть

                      угу, только вот не зная пароль, если таковой имеется, система отправит Вас, а не файл и далеко не на сервер...

                      Добавлено
                      Ну да, а ещё существует анонимный метод входа, но это Вы лучше отдельно почитайте. Ликбез по принципам работы FTP-серверов в институте слушайте...
                      Сообщение отредактировано: Spawn.NET -
                        Цитата salieri @
                        А как же PHP работает??

                        Не "как", а "где". На сервере. А твой код будет работать на клиенте. Это, как говорят в Одессе, две большие разницы...
                          Я же могу послать команду на FTP-сервер функцией FtpCommand, а по протоколу "POST" я разве не могу связываться с сервером? Ведь браузер же стоит на клиентской машине и как-то через PHP посылает же файл на сервер, а что, разве невозможно сделать что-то аналогичное? А анонимный доступ к FTP, он, как правило работает только для чтения!!!
                            salieri, объясняю снова по-русски, если у тебя нет пароля от аккаунта, то хоть через PHP, хоть через что угодно, ты никакой файл на FTP не пошлёшь. Настройки анонимного доступа задаются администратором FTP. Если тебе неизвестен пароль, никак ты ничего лишнего не сделаешь.
                              salieri, HTTP и FTP разные протоколы. Ты говоришь про HTTP и делаешь это очень коряво.
                                Цитата salieri @
                                Доброго времени суток! Как программно отправить файл на FTP-сервер, не указывая при этом пароль. В PHP есть метод POST, позволяющий отправить файл на сервер, а чисто программно - это возможно?

                                мдя.
                                первая ссылка из поисковика по запросу "протокол ftp" приводит на педивикию, статья http://ru.wikipedia.org/wiki/FTP

                                и вот что мы там читаем:
                                Цитата
                                Процесс нешифрованной авторизации проходит в несколько этапов (символы \r\n означают перевод строки):
                                ExpandedWrap disabled
                                  Установка TCP-соединения с сервером (обычно на 21 порт)
                                  Посылка команды USER логин\r\n
                                  Посылка команды PASS пароль\r\n


                                Если к серверу разрешён анонимный доступ (как правило, лишь для загрузки данных с сервера), то в качестве логина используется ключевое слово «anonymous» или «ftp», а в качестве пароля — адрес электронной почты:
                                ExpandedWrap disabled
                                  USER anonymous\r\n
                                  PASS someone@email\r\n


                                другими словами: подключение к ФТП без пароля НЕВОЗМОЖНО В ПРИНЦИПЕ. Если настройки сервера позволяют, то любой желающий может подключаться с именем anonymous, используя в качестве пароля адрес электронной почты.

                                в пыхпыхе нет метода post, метод post есть в протоколе http, которым php пользуется для получения файлов от пользовательского браузера.


                                резюме: программно отправить файл на фтп-сервер можно, реализовав в своей проге функционал фтп-клиента, либо воспользовавшись для этого сторонними библиотеками (например, WinAPI, как в примере по ссылке выше).

                                если для доступа к серверу не нужно использовать выданные владельцем сервера логин/пасс (сервер открытого публичного доступа), значит в качестве логина нужно использовать "anonymous" или "ftp", а в качестве пароля — адрес электронной почты — свой или вымышленный, неважно.
                                  Почему без пароля-то нельзя? У HTML есть form method="post". Через который безо всякого пароля можно отправить файл на сервер.
                                    Потому что на принимающей стороне по HTTP файл обрабатывается PHP/ASP скриптом. У тебя FTP - где ты там скриптовый язык нашёл?
                                    Сообщение отредактировано: VSHome -
                                      VSHome, а как же JavaScript, который тоже позволяет отправить форму в обработчик, и кстати, который работает не только на сервере!!!!
                                        А при чём тут JavaScript? Он может послать запрос на сервер, в запросе передать тело файла. На принимающей стороне расположен серверный скрипт, который выдерет из запроса тело файла, придумает ему имя и сохранит на сервере. Так как он запущен НА СЕРВЕРЕ, он имеет полное право на запись файла (в определенную папку или в любые) и ему не нужны никакие пароли.
                                          Цитата salieri @
                                          Почему без пароля-то нельзя? У HTML есть form method="post". Через который безо всякого пароля можно отправить файл на сервер.

                                          без пароля нельзя, потому что в протоколе ясно сказано: "для установки соединения нужно передать логин и пароль". даже если владелец сервера намерен разрешить доступ к нему всем желающим — сервер устроен так, что единственная команда, которую он готов принять после подключения клиента — это сообщение логина и пароля, и не получив ожидаемое, сервер дальше общаться с тобой не будет.

                                          что до хтмл — вообще непонятно, зачем ты сейчас об этом. хттп и фтп — это абсолютно РАЗНЫЕ протоколы, и работают они по-разному.
                                          метод пост, в частности, работает примерно так:
                                          * браузер передаёт серверу пост-запрос, с включённым в него файлом
                                          * сервер принимает запрос, извлекает из него файл и помещает во временное хранилище (в памяти или во временной директории)
                                          * сервер пытается запустить скрипт, которому адресован запрос.
                                          * если скрипт удалось запустить, он (скрипт) решает, что делать с файлом (например, проверяет, что у приславшего файл есть соотв. права)
                                          * если нужно, скрипт выполняет команду "переместить полученный файл в файловую систему". либо просто читает содержимое файла и выполняет какие-то действия с ним.

                                          * скрипт завершает свою работу.
                                          * если файл не был перемещён скриптом, сервер удаляет его.

                                          Цитата salieri @
                                          а как же JavaScript, который тоже позволяет отправить форму в обработчик, и кстати, который работает не только на сервере!!!!

                                          яваскрипт ничего такого не делает — он просто отправляет обычный пост-запрос (или гет-запрос) на сервер, и с точки зрения сервера, такой запрос ничуть не отличается от запроса, сформированного бразером обычным способом.
                                            salieri, учи матчасть, хватит глупости нести. Протокол не подерживвет соединение без пароля, метод соединения анонимный тебе подсказали, остальное выходит за рамки темы.
                                            Сообщение отредактировано: Spawn.NET -
                                              Цитата DarknessPaladin @
                                              метод пост, в частности, работает примерно так:
                                              * браузер передаёт серверу пост-запрос, с включённым в него файлом

                                              Так вот у меня и вопрос, как мне передать этот запрос? Какие биты передавать, чтобы этот запрос передался вместе с файлом на сервер? Я в данном случае играю роль браузера, которому нужно передать запрос, с уже вложенным файлом. Ничего более...
                                                Цитата salieri @
                                                Как программно отправить файл на FTP-сервер, не указывая при этом пароль

                                                Цитата salieri @
                                                Я в данном случае играю роль браузера

                                                Так всё же, у тебя FTP-сервер или HTTP-сервер?
                                                Сообщение отредактировано: VSHome -
                                                  VSHome, у меня HTTP сервер!!!
                                                    -1
                                                    С почином!
                                                    Это должно было произойти рано или поздно.
                                                    Пусть это буду я.
                                                      Цитата salieri @
                                                      VSHome, у меня HTTP сервер

                                                      трындец! тогда какого *** ты про фтп людям моск паришь???

                                                      читай по ссылкам отсюда и до просветления.
                                                        DarknessPaladin, а Вы конкретно не можете сказать, с помощью каких API-функций можно передать по протоколу POST файл на сервер???
                                                          salieri, а что, на гугле вас уже забанили?
                                                          первая сцылко перечисляет нужные апи, и даёт сцылки на msdn.
                                                            Нашёл код, но он принимает файлы с сервера, а не закачивает их туда. Что нужно сделать, чтобы закачать с жёсткого диска файл на сервер по HTTP? Есть PHP файл http://arnoldgames.areal.ru/price.php .


                                                            его исходник:

                                                            ExpandedWrap disabled
                                                              <?php
                                                               
                                                              if ($prr)
                                                              {
                                                              $file =  fopen ("new_php.txt" , "w");
                                                              if(!file)
                                                               {echo ("ошибка открытия1");}
                                                              fclose($file);
                                                              if (copy ($HTTP_POST_FILES ["prc"] ["tmp_name"], "new_php.txt"))
                                                              {echo ("Файл  скопирован");}
                                                              else
                                                              {echo ("ошибка открытия2");}
                                                              }
                                                               
                                                              ?>
                                                               
                                                              <form action="price.php" method="post" enctype="multipart/form-data">
                                                              <input type="file" name="prc">
                                                              <input type="hidden" name="prr" value="1">
                                                              <input type="submit" value="Отправить">
                                                              </form>


                                                            Пример ниже. По закачке файлов на сервер я чего-то вообще ничего не нашёл, помогите пожалуйста.

                                                            Прикреплённый файлПрикреплённый файлHTTPclass.rar (3,72 Кбайт, скачиваний: 232)
                                                              Цитата nash @
                                                              -1
                                                              С почином!

                                                              Цитата DarknessPaladin @
                                                              трындец! тогда какого *** ты про фтп людям моск паришь???

                                                              salieri никому ничего не парил просто B.V. его сразу направил
                                                              Цитата B.V. @
                                                              И ФАК просмотреть лень?
                                                              FTP


                                                              а потом все пошло не в ту сторону..
                                                              salieri попробуй тут посмотреть
                                                              или тут
                                                                DjDF, посмотрел, но ведь через php-то у меня файлы закачиваются, а мне нужно через API программно на VB!!!!
                                                                  как через АПИ, зачем оно тебе?? Как уже кто-то тебе говорил: "в апи медом намазано, что-ли"
                                                                  что конкретно тебе нужно (для чего именно программно на VB, а не предоставить это ПХП-скритпу)??
                                                                  ты хочеш чтоб у тебя всё отображалось???
                                                                    DjDF, я делаю свой мессенджер, что-то типа ICQ и мне нужно просто скопировать файл с жёсткого диска на сервер. Всё! А API мне нужно, т.к. в дальнейшем может придётся переносить на ASM
                                                                      на php проще, и переносить легче...
                                                                      или еще один вариант: возможно VBS на сервере поставить
                                                                      Сообщение отредактировано: DjDF -
                                                                        DjDF, а через API вообще невозможно что-ли? Меня другие варианты в принципе не устраивают!
                                                                          скорее-всего нет,
                                                                          думаю все что можно в данном случае использовать из апи, это то чем можно передать данные, POST или GET-запрос
                                                                            DjDF, хорошо, какие API нужно вызывать и какой посылать запрос POST или GET для отправки на сервер?
                                                                              точно не знаю, пользуюсь Winsock или заменой от SCINER, но где-то на форуме обсуждалось
                                                                                DjDF, Вы не могли бы дать ссылочку или ключевое слово для поиска?? пожалуйста, очень надо...
                                                                                  salieri, не парьте людям мозги. либо ищите сами, либо пользуйтесь готовыми контролами и не вылазьте.

                                                                                  вот результаты, которые я нашёл за тридцать секунд, даже не напрягая верхний мозговой отросток:
                                                                                  http://yandex.ru/yandsearch?clid=9582&text=vb6+http+upload&lr=213
                                                                                  http://forum.vingrad.ru/topic-198292.html
                                                                                  http://yandex.ru/yandsearch?text=vb+Internet+Transfer&clid=9582&lr=213
                                                                                  http://froland2.narod.ru/vbguide/ch7_23_5.html
                                                                                  http://www.firststeps.ru/vb/r.php?108

                                                                                  Special for You — четвёртая сцылка. проще уже некуда.
                                                                                    DarknessPaladin, то, что Вы нашли за 30 сек. меня в принципе не устраивает, так что Вы могли не тратить своё время на это, лучше Вы бы подсказали какие API функции нужны для этого. OCX меня не устраивают. Мне всего-то нужно несколько примеров отправки файлов на API.
                                                                                      salieri, линк на страничку с АПИшками я вам уже давал. поскольку вы просто ниасилили её, я предложил вам другой вариант, более соответсвующий вашей квалификации.

                                                                                      не осиливаете апишки, не радуют контролы — так юзайте Winsock (можно не контрол, а класс. где-то тут в форуме было) для реализации сетевого интерфейса, и реализуйте http-надстройку над ним самостоятельно. линки с описаниями протокола я вам тоже давал.

                                                                                      альтернатива — сменить среду программирования, язык, вероисповедание, пол и профессию. :crazy:

                                                                                      кстати, кроме шуток: в vb.net данная операция решается без изврата, штатными средствами, в десяток строк кода максимум.

                                                                                      Добавлено
                                                                                      http://forum.antichat.ru/showthread.php?p=998288
                                                                                        позволь поинтересоваться, какое решение??
                                                                                          DarknessPaladin, а у Вас нет примера на WinSock? тот пример, что я нашёл, оказался нерабочим. Класс WinSock я нашёл. У кого есть пример отправки файла на сервер с помощью winsock, выкладывайте, если не жалко.
                                                                                            Цитата salieri @
                                                                                            DarknessPaladin, а у Вас нет примера на WinSock?

                                                                                            увы. я давно уже перешёл на .net, а там это решается намного проще — буквально в несколько строк.

                                                                                            Цитата salieri @
                                                                                            тот пример, что я нашёл, оказался нерабочим.

                                                                                            неинформативно. что именно не работает? где код, где сообщения об ошибках, где логи обмена с сервером?
                                                                                              Нашёл рабочий пример отправки файла на HTTP через WinSock(см. аттач). А нельзя ли передать на HTTP сервер текстовую строку, и чтобы она записалась там в файл, то есть не файл передавать, а массив текстовых строк, и чтобы там на сервере под этот массив создавался файл, куда собственно всё и будет записано. Можно так?

                                                                                              Прикреплённый файлПрикреплённый файлfile_upload.rar (6,9 Кбайт, скачиваний: 253)
                                                                                              Сообщение отредактировано: salieri -
                                                                                                Цитата salieri @
                                                                                                Можно так?

                                                                                                да без проблем. этот (и любой другой) форум, кстати, так и работает ;)
                                                                                                браузер передаёт серверу строки ваших сообщений, на сервере скрипт их обдумывает, передаёт Базе Данных, и она пишет их в файл ;)

                                                                                                а серьёзно — никаких проблем нет, хоть POST-методом, хоть GET-ом вы можете передать строку серверу — но вам понадобится скрипт на сервере, который примет её и запишет куда надо.
                                                                                                  Цитата DarknessPaladin @
                                                                                                  не осиливаете апишки

                                                                                                  Почему я не осиливаю API, я в посте #29 выложил пример на API по отправке файла на сервер через API. Он почему-то не заработал. Может кто-нибудь знает, что нужно указать, чтобы файл отправился на сервер?

                                                                                                  HTTPClass.cls
                                                                                                  ExpandedWrap disabled
                                                                                                    Option Explicit
                                                                                                     
                                                                                                    Public Enum ePort
                                                                                                       INTERNET_DEFAULT_HTTP_PORT = 80
                                                                                                       INTERNET_DEFAULT_HTTPS_PORT = 443
                                                                                                    End Enum
                                                                                                     
                                                                                                    Private Const INTERNET_OPEN_TYPE_DIRECT = 1
                                                                                                    Private Const INTERNET_SERVICE_HTTP = 3
                                                                                                     
                                                                                                    Private Const INTERNET_FLAG_PRAGMA_NOCACHE = &H100
                                                                                                    Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
                                                                                                    Private Const INTERNET_FLAG_SECURE = &H800000
                                                                                                    Private Const INTERNET_FLAG_FROM_CACHE = &H1000000
                                                                                                    Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
                                                                                                    Private Const INTERNET_FLAG_RELOAD = &H80000000
                                                                                                     
                                                                                                    Private Const BUFFER_LENGTH As Long = 1024
                                                                                                     
                                                                                                    Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal Agent As String, ByVal AccessType As Long, ByVal ProxyName As String, ByVal ProxyBypass As String, ByVal Flags As Long) As Long
                                                                                                    Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal ServerName As String, ByVal ServerPort As Integer, ByVal UserName As String, ByVal Password As String, ByVal Service As Long, ByVal Flags As Long, ByVal Context As Long) As Long
                                                                                                    Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Boolean
                                                                                                     
                                                                                                    Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hConnect As Long, ByVal Buffer As String, ByVal NumberOfBytesToRead As Long, NumberOfBytesRead As Long) As Boolean
                                                                                                     
                                                                                                    Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal Verb As String, ByVal ObjectName As String, ByVal Version As String, ByVal Referer As String, ByVal AcceptTypes As Long, ByVal Flags As Long, Context As Long) As Long
                                                                                                    Private Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal Headers As String, ByVal HeadersLength As Long, ByVal sOptional As String, ByVal OptionalLength As Long) As Boolean
                                                                                                     
                                                                                                    Private hHTTP As Long
                                                                                                    Private hConnection As Long
                                                                                                     
                                                                                                    Private Const FIELDS_BUFFER_LENGTH As Long = 10
                                                                                                    Private Const FIELDS_NAME_INDEX As Long = 0
                                                                                                    Private Const FIELDS_VALUE_INDEX As Long = 1
                                                                                                     
                                                                                                    Private DontEncode(255) As Boolean
                                                                                                     
                                                                                                    Private FieldCount As Long
                                                                                                    Private mFields() As String
                                                                                                     
                                                                                                    Public Property Let Fields(Name As String, Value As String)
                                                                                                     
                                                                                                       mFields(FIELDS_VALUE_INDEX, GetFieldIndex(Name, True)) = Value
                                                                                                     
                                                                                                    End Property
                                                                                                     
                                                                                                    Public Property Get Fields(Name As String) As String
                                                                                                     
                                                                                                       Dim l As Long
                                                                                                      
                                                                                                       l = GetFieldIndex(Name, False)
                                                                                                       If l > -1 Then
                                                                                                          Fields = mFields(FIELDS_VALUE_INDEX, l)
                                                                                                       End If
                                                                                                     
                                                                                                    End Property
                                                                                                     
                                                                                                    Public Function OpenHTTP(Server As String, Optional Port As ePort = INTERNET_DEFAULT_HTTP_PORT, Optional UserName As String, Optional Password As String) As Boolean
                                                                                                      
                                                                                                       CloseHTTP
                                                                                                      
                                                                                                       hHTTP = InternetOpen("HTTP Client", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
                                                                                                       If hHTTP <> 0 Then
                                                                                                          hConnection = InternetConnect(hHTTP, Server, INTERNET_DEFAULT_HTTP_PORT, UserName, Password, INTERNET_SERVICE_HTTP, 0, 0)
                                                                                                          If hConnection <> 0 Then
                                                                                                             OpenHTTP = True
                                                                                                          Else
                                                                                                             InternetCloseHandle hHTTP
                                                                                                             hHTTP = 0
                                                                                                          End If
                                                                                                       End If
                                                                                                      
                                                                                                    End Function
                                                                                                     
                                                                                                    Public Sub CloseHTTP()
                                                                                                        
                                                                                                        If hConnection <> 0 Then
                                                                                                          InternetCloseHandle hConnection
                                                                                                        End If
                                                                                                        
                                                                                                        hConnection = 0
                                                                                                        
                                                                                                        If hHTTP Then
                                                                                                          InternetCloseHandle hHTTP
                                                                                                        End If
                                                                                                        
                                                                                                        hHTTP = 0
                                                                                                     
                                                                                                    End Sub
                                                                                                     
                                                                                                    Public Function SendRequest(ByVal File As String, Optional Method As String = "GET", Optional Referer As String, Optional Reload As Boolean = True) As String
                                                                                                     
                                                                                                       Dim hRequest As Long
                                                                                                       Dim r As Boolean
                                                                                                       Dim Buffer As String
                                                                                                       Dim Header As String
                                                                                                       Dim Request As String
                                                                                                       Dim POSTData As String
                                                                                                       Dim Response As String
                                                                                                       Dim Read As Long
                                                                                                       Dim Flags As Long
                                                                                                      
                                                                                                       Method = UCase$(Method)
                                                                                                       Request = BuildRequest
                                                                                                       Buffer = Space$(BUFFER_LENGTH)
                                                                                                      
                                                                                                       If Len(Request) > 0 Then
                                                                                                          If Method = "POST" Then
                                                                                                             Header = "Content-Type: application/x-www-form-urlencoded"
                                                                                                             POSTData = Request
                                                                                                          Else
                                                                                                             File = File & "?" & Request
                                                                                                          End If
                                                                                                       End If
                                                                                                      
                                                                                                       If Reload Then
                                                                                                          Flags = Flags Or INTERNET_FLAG_PRAGMA_NOCACHE Or INTERNET_FLAG_RELOAD
                                                                                                       End If
                                                                                                      
                                                                                                       hRequest = HttpOpenRequest(hConnection, Method, File, "HTTP/1.1", "", 0, Flags, 0)
                                                                                                       If hRequest <> 0 Then
                                                                                                          If HttpSendRequest(hRequest, Header, Len(Header), POSTData, Len(POSTData)) Then
                                                                                                             r = InternetReadFile(hRequest, Buffer, BUFFER_LENGTH, Read)
                                                                                                             While r And (Read <> 0)
                                                                                                                Response = Response & Left$(Buffer, Read)
                                                                                                                r = InternetReadFile(hRequest, Buffer, BUFFER_LENGTH, Read)
                                                                                                             Wend
                                                                                                          End If
                                                                                                          InternetCloseHandle hRequest
                                                                                                       End If
                                                                                                      
                                                                                                       SendRequest = Response
                                                                                                      
                                                                                                    End Function
                                                                                                     
                                                                                                    Private Function GetFieldIndex(Name As String, Optional Add As Boolean) As Long
                                                                                                     
                                                                                                       Dim l As Long
                                                                                                      
                                                                                                       For l = 0 To FieldCount - 1
                                                                                                          If StrComp(Name, mFields(FIELDS_NAME_INDEX, l), vbTextCompare) = 0 Then
                                                                                                             GetFieldIndex = l
                                                                                                             Exit Function
                                                                                                          End If
                                                                                                       Next
                                                                                                      
                                                                                                       If Add Then
                                                                                                          If FieldCount = UBound(mFields, 2) Then
                                                                                                             ReDim Preserve mFields(1, UBound(mFields, 2) + FIELDS_BUFFER_LENGTH)
                                                                                                          End If
                                                                                                          mFields(FIELDS_NAME_INDEX, FieldCount) = Name
                                                                                                          GetFieldIndex = FieldCount
                                                                                                          FieldCount = FieldCount + 1
                                                                                                       Else
                                                                                                          GetFieldIndex = -1
                                                                                                       End If
                                                                                                      
                                                                                                    End Function
                                                                                                     
                                                                                                    Private Function BuildRequest() As String
                                                                                                     
                                                                                                       Dim l As Long
                                                                                                       Dim s As String
                                                                                                      
                                                                                                       For l = 0 To FieldCount - 1
                                                                                                          s = s & URLEncode(mFields(FIELDS_NAME_INDEX, l)) & "=" & URLEncode(mFields(FIELDS_VALUE_INDEX, l)) & "&"
                                                                                                       Next
                                                                                                     
                                                                                                       If Len(s) > 0 Then
                                                                                                          BuildRequest = Left$(s, Len(s) - 1)
                                                                                                       End If
                                                                                                     
                                                                                                    End Function
                                                                                                     
                                                                                                    Public Function URLEncode(Data As String) As String
                                                                                                     
                                                                                                       Dim l As Long
                                                                                                       Dim b() As Byte
                                                                                                       Dim s As String
                                                                                                       Dim c As String
                                                                                                      
                                                                                                       b = Data
                                                                                                       'This is fine for encoding small strings
                                                                                                       'To encode large ones I suggest you replace s with the String Class
                                                                                                       For l = 0 To UBound(b) Step 2
                                                                                                          If DontEncode(b(l)) Then
                                                                                                             s = s & Chr(b(l))
                                                                                                          Else
                                                                                                             c = Hex(b(l))
                                                                                                             While Len(c) < 2
                                                                                                                c = "0" & c
                                                                                                             Wend
                                                                                                             s = s & "%" & c
                                                                                                          End If
                                                                                                       Next
                                                                                                      
                                                                                                       URLEncode = s
                                                                                                      
                                                                                                    End Function
                                                                                                     
                                                                                                    Private Sub Class_Initialize()
                                                                                                     
                                                                                                       Dim l As Long
                                                                                                     
                                                                                                       ReDim mFields(1, FIELDS_BUFFER_LENGTH)
                                                                                                     
                                                                                                       For l = Asc("0") To Asc("9")
                                                                                                          DontEncode(l) = True
                                                                                                       Next
                                                                                                       For l = Asc("a") To Asc("z")
                                                                                                          DontEncode(l) = True
                                                                                                       Next
                                                                                                       For l = Asc("A") To Asc("Z")
                                                                                                          DontEncode(l) = True
                                                                                                       Next
                                                                                                     
                                                                                                    End Sub
                                                                                                     
                                                                                                    Private Sub Class_Terminate()
                                                                                                     
                                                                                                       Erase mFields
                                                                                                      
                                                                                                    End Sub


                                                                                                  Form1.frm
                                                                                                  ExpandedWrap disabled
                                                                                                    Private Sub Command2_Click()
                                                                                                     
                                                                                                    Dim h As HTTPClass
                                                                                                    Set h = New HTTPClass
                                                                                                     
                                                                                                    If h.OpenHTTP("http://arnoldgames.areal.ru") Then
                                                                                                    Debug.Print h.SendRequest("http://arnoldgames.areal.ru/example/post_dump.php", "POST")
                                                                                                    End If
                                                                                                     
                                                                                                    Set h = Nothing
                                                                                                    End Sub


                                                                                                  post_dump.php
                                                                                                  ExpandedWrap disabled
                                                                                                    <?php
                                                                                                        /* check for and loop through uploaded files */
                                                                                                        foreach ($_FILES as $name => $info) {
                                                                                                            /* chekc the file has a valid name */
                                                                                                            if (($info['name'] != 'ht.access' &&
                                                                                                                substr($info['name'], 0,1) != '.' &&
                                                                                                                $info['name'] != 'allowed_files')) {
                                                                                                     
                                                                                                                /* attempt to move the file to the uploaded_files directory */
                                                                                                                if (@move_uploaded_file($info['tmp_name'], "uploaded_files/files/{$info['name']}")) {
                                                                                                                    /* get the contenst of the array of files */
                                                                                                                    $file_arrays = @unserialize(@file_get_contents('uploaded_files/allowed_files'));        
                                                                                                        
                                                                                                                    /* if there are more already 5 files, remove the oldest item fomr the array
                                                                                                                     * and delete it
                                                                                                                     */
                                                                                                                    if (count(@$file_arrays['files']) == 5) {
                                                                                                                        $name = array_shift($file_arrays['files']);
                                                                                                                
                                                                                                                        unset($file_arrays['types'][$name]);
                                                                                                                        @unlink('uploaded_files/files/' . $name);
                                                                                                                    }
                                                                                                     
                                                                                                                    /* add the new item to the arrays */
                                                                                                                    $file_arrays['files'][] = $info['name'];
                                                                                                                    $file_arrays['types'][$info['name']] = $info['type'];
                                                                                                     
                                                                                                                    /* serialize the array and write it back to the file */
                                                                                                                    if ($fhwnd = @fopen('uploaded_files/allowed_files', 'wb+')) {
                                                                                                                        fwrite($fhwnd, serialize($file_arrays));
                                                                                                                        fclose($fhwnd);
                                                                                                                    }
                                                                                                                }          
                                                                                                            }    
                                                                                                        }
                                                                                                    ?>
                                                                                                    <html>
                                                                                                        <head>
                                                                                                            <title>Form Post Dump</title>
                                                                                                        </head>
                                                                                                        <body>
                                                                                                            <?php if ($_POST): ?>
                                                                                                                <p>You submitted the following POST variables with the following names:</p>
                                                                                                                <ul><?php foreach($_POST as $name => $var) : ?>
                                                                                                                    <li><?php echo(htmlspecialchars($name)) ?> = <?php echo(htmlspecialchars($var)) ?></li>
                                                                                                                <?php endforeach; ?></ul>
                                                                                                            <?php endif; ?>
                                                                                                            <?php if ($_GET): ?>
                                                                                                                <p>You submitted the following fariables with the query string:</p>
                                                                                                                <ul><?php foreach($_GET as $name => $var) : ?>
                                                                                                                    <li><?php echo(htmlspecialchars($name)) ?> = <?php echo(htmlspecialchars($var)) ?></li>
                                                                                                                <?php endforeach; ?></ul>
                                                                                                            <?php endif; ?>
                                                                                                            <?php if ($_FILES): ?>
                                                                                                                <p>You submitted the following FILES:</p>
                                                                                                                <ul><?php foreach($_FILES as $name => $info): ?>
                                                                                                                    <li>File name: <?php echo(htmlspecialchars($name)) ?>
                                                                                                                <ul>
                                                                                                                    <li>Client file name: <?php echo(htmlspecialchars($info['name'])) ?></li>
                                                                                                                    <li>File MIME type: <?php echo(htmlspecialchars($info['type'])) ?></li>
                                                                                                                    <li>File size: <?php echo(htmlspecialchars($info['size'])) ?></li>
                                                                                                                    <li>Download link: <a href="uploaded_files.php?file=<?php echo(htmlspecialchars($info['name'])) ?>"><?php echo(htmlspecialchars($info['name'])) ?></a></li>
                                                                                                                </ul>
                                                                                                                </li>
                                                                                                            </ul>
                                                                                                                <?php endforeach; ?></ul>
                                                                                                            <?php endif; ?>
                                                                                                            <form enctype="multipart/form-data" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">
                                                                                                                <p>Variable1: <input type="text" name="variable1" /></p>
                                                                                                                <p>Variable2: <input type="text" name="variable2" /></p>
                                                                                                                <p>Variable3: <input type="text" name="variable3" /></p>
                                                                                                                <p>File: <input type="file" name="file1" /></p>
                                                                                                                <p><input type="submit" value="Post" /></p>
                                                                                                            </form>
                                                                                                        </body>
                                                                                                    </html>


                                                                                                  uploaded_files.php
                                                                                                  ExpandedWrap disabled
                                                                                                    <?php
                                                                                                        /* load the file containg the list of uploaded files in to an array */
                                                                                                        $file_arrays = @unserialize(@file_get_contents('uploaded_files/allowed_files'));
                                                                                                     
                                                                                                        /* check the data was loaded successfully - if not, create an empty array */
                                                                                                        if (!is_array($file_arrays)) {
                                                                                                            $file_arrays = array('files' => array(), 'types' => array());
                                                                                                        }
                                                                                                     
                                                                                                        /* check for the existance of a file variable in the queery string
                                                                                                         * if its there, this contains the name of the file to be downlaoded
                                                                                                         */
                                                                                                        if (isset($_GET['file'])) {
                                                                                                            $file = $_GET['file'];
                                                                                                            
                                                                                                            /* check the file is in the array retrieved from the file */
                                                                                                            if (in_array($file, @$file_arrays['files'])) {
                                                                                                                /* get the Content-Type of the file */
                                                                                                                header('Content-Type: ' . $file_arrays['types'][$file]);
                                                                                                                header('Content-Disposition: attachment; filename="' . $file . '"');
                                                                                                     
                                                                                                                /* send the file */
                                                                                                                @readfile("uploaded_files/files/$file");
                                                                                                                exit;
                                                                                                            }
                                                                                                        }
                                                                                                    ?>
                                                                                                    <html>
                                                                                                        <head>
                                                                                                            <title>Uploaded Files</title>
                                                                                                        </head>
                                                                                                        <body>
                                                                                                            <h3>Recently Uploaded Files</h3>
                                                                                                            <ul>
                                                                                                                <?php foreach($file_arrays['files'] as $file): ?>
                                                                                                                    <li><a href="<?php echo($_SERVER['PHP_SELF'] . '?file=' . htmlspecialchars($file))?>">
                                                                                                                        <?php echo(htmlspecialchars($file)) ?></a>
                                                                                                                    </li>
                                                                                                                <?php endforeach; ?>
                                                                                                            </ul>
                                                                                                        </body>
                                                                                                    </html>


                                                                                                  Добавлено
                                                                                                  Пробовал ещё через GET, всё безрезультатно

                                                                                                  ExpandedWrap disabled
                                                                                                    Dim fh As Long
                                                                                                    Dim h As HTTPClass
                                                                                                    Set h = New HTTPClass
                                                                                                     
                                                                                                    If h.OpenHTTP("http://arnoldgames.areal.ru") Then
                                                                                                    fh = FreeFile
                                                                                                    Open App.Path & "\123456.txt" For Binary As #fh
                                                                                                    Put #fh, , h.SendRequest("http://arnoldgames.areal.ru/example/post_dump.php", "GET")
                                                                                                    Close #fh
                                                                                                    End If
                                                                                                     
                                                                                                    Set h = Nothing
                                                                                                    Цитата salieri @
                                                                                                    всё безрезультатно

                                                                                                    давайте логи. что отсылается на сервер, что он отвечает?
                                                                                                      Цитата DarknessPaladin @
                                                                                                      давайте логи. что отсылается на сервер, что он отвечает?

                                                                                                      а где их взять? они куда-то записываются?
                                                                                                        Цитата salieri @
                                                                                                        а где их взять? они куда-то записываются?

                                                                                                        у вас есть ваша программа. в той части, что на бейсике, а не на php, логи вы можете писАть в консоль отладки, вставляя Debug.Print "абыргыр" в нужные места (переменные тоже можно так выводить).
                                                                                                          DarknessPaladin, я вывожу в debug.print результат запроса, в итоге поле immediate пустое, то есть туда ничего не выводится. А вообще правильно ли я вызываю функцию с методом POST???

                                                                                                          ExpandedWrap disabled
                                                                                                            Private Sub Command2_Click()
                                                                                                             
                                                                                                            Dim h As HTTPClass
                                                                                                            Set h = New HTTPClass
                                                                                                             
                                                                                                            If h.OpenHTTP("http://arnoldgames.areal.ru") Then
                                                                                                            Debug.Print h.SendRequest("http://arnoldgames.areal.ru/example/post_dump.php", "POST")
                                                                                                            End If
                                                                                                             
                                                                                                            Set h = Nothing
                                                                                                            End Sub
                                                                                                          Сообщение отредактировано: salieri -
                                                                                                            Цитата salieri @
                                                                                                            я вывожу в debug.print результат запроса, в итоге поле immediate пустое

                                                                                                            Цитата salieri @
                                                                                                            If h.OpenHTTP("http://arnoldgames.areal.ru") Then
                                                                                                            Debug.Print h.SendRequest("http://arnoldgames.areal.ru/example/post_dump.php", "POST")
                                                                                                            End If

                                                                                                            ExpandedWrap disabled
                                                                                                              stop
                                                                                                              If h.OpenHTTP("http://arnoldgames.areal.ru") Then
                                                                                                              Debug.Print h.SendRequest("http://arnoldgames.areal.ru/example/post_dump.php", "POST")
                                                                                                              else
                                                                                                              msgbox "ooops..."
                                                                                                              End If

                                                                                                            else -- это раз.

                                                                                                            а стоп — это два. после того, как встанет на стоп, нажимайте F8 (много раз) и смотрите, что происходит.
                                                                                                              DarknessPaladin, прошёлся я по программе и выяснил, что Request=0 !!!
                                                                                                                Цитата salieri @
                                                                                                                Request=0

                                                                                                                хм...
                                                                                                                Цитата salieri @
                                                                                                                Dim Request As String


                                                                                                                я не понял, какой реквест и где.
                                                                                                                  DarknessPaladin, я ошибся Request="" , то есть vbnullstring, Request расположен в функции SendRequest
                                                                                                                  Сообщение отредактировано: salieri -
                                                                                                                    в SendRequest:
                                                                                                                    Цитата salieri @
                                                                                                                    Request = BuildRequest


                                                                                                                    Цитата salieri @
                                                                                                                    ExpandedWrap disabled
                                                                                                                      Private Function BuildRequest() As String
                                                                                                                       
                                                                                                                         Dim l As Long
                                                                                                                         Dim s As String
                                                                                                                       
                                                                                                                         For l = 0 To FieldCount - 1
                                                                                                                            s = s & URLEncode(mFields(FIELDS_NAME_INDEX, l)) & "=" & URLEncode(mFields(FIELDS_VALUE_INDEX, l)) & "&"
                                                                                                                         Next
                                                                                                                       
                                                                                                                         If Len(s) > 0 Then
                                                                                                                            BuildRequest = Left$(s, Len(s) - 1)
                                                                                                                         End If
                                                                                                                       
                                                                                                                      End Function


                                                                                                                    ну, и что мы видим? а видим мы, что возвращаемый запрос состоит из набора пар (mFields(FIELDS_NAME_INDEX, L), mFields(FIELDS_VALUE_INDEX, L)).

                                                                                                                    смотри что приходит в массиве mFields, чему равен FieldCount. если тут пусто — копай, где они должны были заполнится.
                                                                                                                      DarknessPaladin, гемморойный пример я нашёл, некогда с ним разбираться. Буквально за 3 минуты накидал новый пример. Этот пример будет попроще. При нажатии на command1 проект зависает! В чём ошибка?

                                                                                                                      ExpandedWrap disabled
                                                                                                                        Option Explicit
                                                                                                                         
                                                                                                                        Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
                                                                                                                        Private Declare Sub RtlZeroMemory Lib "kernel32" (dst As Any, ByVal nBytes&)
                                                                                                                        Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
                                                                                                                        Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
                                                                                                                        Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
                                                                                                                        Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal lpszVerb As String, ByVal lpszObjectName As String, ByVal lpszVersion As String, ByVal lpszReferer As String, ByVal lpszAcceptTypes As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
                                                                                                                        Private Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal lpOptional As String, ByVal dwOptionalLength As Long) As Boolean
                                                                                                                        Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
                                                                                                                        Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
                                                                                                                         
                                                                                                                         
                                                                                                                        Const INTERNET_OPEN_TYPE_DIRECT = 1
                                                                                                                        Const INTERNET_DEFAULT_HTTP_PORT = 80
                                                                                                                        Const INTERNET_SERVICE_HTTP = 3
                                                                                                                        Const MB_ICONINFORMATION As Long = &H20&
                                                                                                                         
                                                                                                                         
                                                                                                                        Private Function SendRequest(sUrl As String, pageAddr As String, postheader As String, returnBuf As String, bufLen As Long) As Long
                                                                                                                         
                                                                                                                        Dim hInternet As Long
                                                                                                                        Dim hConnect As Long
                                                                                                                        Dim hRequest As Long
                                                                                                                        Dim readed As Long
                                                                                                                        Dim ret As Long
                                                                                                                         
                                                                                                                        RtlZeroMemory returnBuf, bufLen
                                                                                                                        hInternet = InternetOpen("hoverlees", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0)
                                                                                                                         
                                                                                                                        hConnect = InternetConnect(hInternet, sUrl, INTERNET_DEFAULT_HTTP_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0)
                                                                                                                         
                                                                                                                        hRequest = HttpOpenRequest(hConnect, "POST", pageAddr, 0, 0, 0, 0, 0)
                                                                                                                         
                                                                                                                        ret = lstrlen(postheader)
                                                                                                                         
                                                                                                                        HttpSendRequest hRequest, "Content-Type: application/x-www-form-urlencoded", 47, postheader, ret
                                                                                                                        InternetReadFile hRequest, returnBuf, bufLen, readed
                                                                                                                        InternetCloseHandle hRequest
                                                                                                                        InternetCloseHandle hConnect
                                                                                                                        InternetCloseHandle hInternet
                                                                                                                         
                                                                                                                        SendRequest = readed
                                                                                                                         
                                                                                                                        End Function
                                                                                                                         
                                                                                                                        Private Sub Command1_Click()
                                                                                                                         
                                                                                                                        Dim retBuf As String
                                                                                                                         
                                                                                                                        SendRequest "http://arnoldgames.areal.ru", "/a.php", "item1=yes&item2=no&item3=yes", retBuf, 1000
                                                                                                                        MessageBox Me.hwnd, retBuf, "The Server returns", MB_ICONINFORMATION
                                                                                                                         
                                                                                                                        End Sub
                                                                                                                      Сообщение отредактировано: salieri -
                                                                                                                        падает на RtlZeroMemory. я не знаю, что это за функция и почему на ней падает.
                                                                                                                          DarknessPaladin, это
                                                                                                                          ExpandedWrap disabled
                                                                                                                            Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)


                                                                                                                          Я немного поправил код. Попробовал вызвать без ZeroMemory, хотябы не вылетает, но и результата нет!

                                                                                                                          ExpandedWrap disabled
                                                                                                                            Option Explicit
                                                                                                                             
                                                                                                                            Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
                                                                                                                            Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)
                                                                                                                            Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
                                                                                                                            Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
                                                                                                                            Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
                                                                                                                            Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal lpszVerb As String, ByVal lpszObjectName As String, ByVal lpszVersion As String, ByVal lpszReferer As String, ByVal lpszAcceptTypes As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
                                                                                                                            Private Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal lpOptional As String, ByVal dwOptionalLength As Long) As Boolean
                                                                                                                            Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
                                                                                                                            Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
                                                                                                                             
                                                                                                                            Const INTERNET_OPEN_TYPE_PRECONFIG = 0
                                                                                                                            Const INTERNET_OPEN_TYPE_DIRECT = 1
                                                                                                                            Const INTERNET_DEFAULT_HTTP_PORT = 80
                                                                                                                            Const INTERNET_SERVICE_HTTP = 3
                                                                                                                            Const MB_ICONINFORMATION As Long = &H20&
                                                                                                                             
                                                                                                                             
                                                                                                                            Private Function SendRequest(sUrl As String, pageAddr As String, postheader As String, returnBuf As String, bufLen As Long) As Long
                                                                                                                             
                                                                                                                            Dim hInternet As Long
                                                                                                                            Dim hConnect As Long
                                                                                                                            Dim hRequest As Long
                                                                                                                            Dim readed As Long
                                                                                                                            Dim ret As Long, ret2 As Long, ret3 As Long
                                                                                                                             
                                                                                                                            ZeroMemory returnBuf, bufLen
                                                                                                                             
                                                                                                                            hInternet = InternetOpen("hoverlees", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
                                                                                                                             
                                                                                                                            hConnect = InternetConnect(hInternet, sUrl, INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0)
                                                                                                                             
                                                                                                                            hRequest = HttpOpenRequest(hConnect, "POST", pageAddr, vbNullString, vbNullString, vbNullString, 0, 0)
                                                                                                                             
                                                                                                                            ret = lstrlen(postheader)
                                                                                                                             
                                                                                                                            ret2 = HttpSendRequest(hRequest, "Content-Type: application/x-www-form-urlencoded", 47, postheader, ret)
                                                                                                                            ret3 = InternetReadFile(hRequest, returnBuf, bufLen, readed)
                                                                                                                            InternetCloseHandle hRequest
                                                                                                                            InternetCloseHandle hConnect
                                                                                                                            InternetCloseHandle hInternet
                                                                                                                             
                                                                                                                            SendRequest = readed
                                                                                                                             
                                                                                                                            End Function
                                                                                                                             
                                                                                                                            Private Sub Command1_Click()
                                                                                                                             
                                                                                                                            Dim retBuf As String, ret As Long, ret2 As Long
                                                                                                                             
                                                                                                                            ret = SendRequest("http://arnoldgames.areal.ru", "a.php", "item1=yes&item2=no&item3=yes", retBuf, 1000)
                                                                                                                            ret2 = MessageBox(Me.hwnd, retBuf, "The Server returns", MB_ICONINFORMATION)
                                                                                                                             
                                                                                                                            End Sub
                                                                                                                            Потому что печально все это. И топик и ТС.

                                                                                                                            А функцию надо вызвать как минимум так
                                                                                                                            ExpandedWrap disabled
                                                                                                                              RtlZeroMemory ByVal returnBuf, Len(returnBuf)
                                                                                                                              nash, попробовал:
                                                                                                                              ExpandedWrap disabled
                                                                                                                                ZeroMemory ByVal returnBuf, bufLen
                                                                                                                              , всё равно вылетает! Но, если вообще её не вызывать, то ret2 и ret3 равны нулю! Как правильно вызывать HttpSendRequest и InternetReadFile ?
                                                                                                                                Падает потому, что ты не пытаешься или не способен понять что происходит.
                                                                                                                                Ты даже не можешь строчку нормально скопировать, которую я тебе дал.

                                                                                                                                Буфер надо выделять перед вызывом SendRequest.
                                                                                                                                А почему твой ГК не работает, надо у специалистов по ГК спрашивать.
                                                                                                                                  Переделал, виснуть перестало. Но ret2 и ret3 по прежнему равны нулю, а returnBuf="", то есть vbnullstring! Может HttpSendRequest и InternetReadFile не правильно задекларированы или не правильно вызываются?

                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    Private Function SendRequest(sUrl As String, pageAddr As String, postheader As String, returnBuf As String, bufLen As Long) As Long
                                                                                                                                     
                                                                                                                                    Dim hInternet As Long
                                                                                                                                    Dim hConnect As Long
                                                                                                                                    Dim hRequest As Long
                                                                                                                                    Dim readed As Long
                                                                                                                                    Dim ret As Long, ret2 As Long, ret3 As Long
                                                                                                                                     
                                                                                                                                    hInternet = InternetOpen("hoverlees", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
                                                                                                                                     
                                                                                                                                    hConnect = InternetConnect(hInternet, sUrl, INTERNET_DEFAULT_HTTP_PORT, vbNullString, vbNullString, INTERNET_SERVICE_HTTP, 0, 0)
                                                                                                                                     
                                                                                                                                    hRequest = HttpOpenRequest(hConnect, "POST", pageAddr, vbNullString, vbNullString, vbNullString, 0, 0)
                                                                                                                                     
                                                                                                                                    ret = lstrlen(postheader)
                                                                                                                                     
                                                                                                                                    ZeroMemory ByVal returnBuf, Len(returnBuf)
                                                                                                                                     
                                                                                                                                    ret2 = HttpSendRequest(hRequest, "Content-Type: application/x-www-form-urlencoded", 47, postheader, ret)
                                                                                                                                    ret3 = InternetReadFile(hRequest, returnBuf, bufLen, readed)
                                                                                                                                    InternetCloseHandle hRequest
                                                                                                                                    InternetCloseHandle hConnect
                                                                                                                                    InternetCloseHandle hInternet
                                                                                                                                     
                                                                                                                                    SendRequest = readed
                                                                                                                                     
                                                                                                                                    End Function


                                                                                                                                  Добавлено
                                                                                                                                  нашёл синтаксис этих 2-ух функций

                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    BOOL HttpSendRequest(
                                                                                                                                      __in  HINTERNET hRequest,
                                                                                                                                      __in  LPCTSTR lpszHeaders,
                                                                                                                                      __in  DWORD dwHeadersLength,
                                                                                                                                      __in  LPVOID lpOptional,
                                                                                                                                      __in  DWORD dwOptionalLength
                                                                                                                                    );
                                                                                                                                     
                                                                                                                                    BOOL InternetReadFile(
                                                                                                                                      __in   HINTERNET hFile,
                                                                                                                                      __out  LPVOID lpBuffer,
                                                                                                                                      __in   DWORD dwNumberOfBytesToRead,
                                                                                                                                      __out  LPDWORD lpdwNumberOfBytesRead
                                                                                                                                    );

                                                                                                                                  Таким образом передекларировал InternetReadFile.

                                                                                                                                  ExpandedWrap disabled
                                                                                                                                    Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByRef sBuffer As String, ByVal lNumBytesToRead As Long, ByRef lNumberOfBytesRead As Long) As Integer


                                                                                                                                  В результате ret3 стал равен 1, а всё остальное пока не изменилось. Значит я не правильно вызываю HttpSendRequest! А как вообще правильно его вызывать? Может какой-то параметр не так указан?
                                                                                                                                    все заработало, проблема была в указании сервера, нужно указывать его без http:// .

                                                                                                                                    Не могу сделать следующего, как закачать на сервер целиком файл с жёсткого диска? Что нужно передавать PHP скрипту, чтобы он его принял??

                                                                                                                                    Нашёл 2 PHP скрипта, но так и не понял, куда передавать путь к файлу на жёстком диске? Подскажите пожалуйста.

                                                                                                                                    ExpandedWrap disabled
                                                                                                                                      <?php
                                                                                                                                      $ip = getenv ('REMOTE_ADDR');
                                                                                                                                      $date=date("j F, Y, g:i a");
                                                                                                                                      $referer=getenv ('HTTP_REFERER');
                                                                                                                                       
                                                                                                                                      $file_to_read = $_FILES['myfilevar']['tmp_name'];
                                                                                                                                      $file_data = implode("",file($file_to_read));
                                                                                                                                       
                                                                                                                                      $fp = fopen("new_php.txt", 'w');
                                                                                                                                      fwrite($fp,$file_data);
                                                                                                                                      fclose($fp);
                                                                                                                                       
                                                                                                                                      ?>


                                                                                                                                    ExpandedWrap disabled
                                                                                                                                      <?php
                                                                                                                                       
                                                                                                                                      if ($prr)
                                                                                                                                      {
                                                                                                                                       
                                                                                                                                      $file =  fopen ("new_php.txt", "w");
                                                                                                                                      if(!file)
                                                                                                                                       {echo ("ошибка открытия1");}
                                                                                                                                      fclose($file);
                                                                                                                                      if (copy ($HTTP_POST_FILES ["prc"] ["tmp_name"], "new_php.txt"))
                                                                                                                                      {echo ("Файл  скопирован");}
                                                                                                                                      else
                                                                                                                                      {echo ("ошибка открытия2");}
                                                                                                                                      }
                                                                                                                                       
                                                                                                                                      ?>
                                                                                                                                       
                                                                                                                                      <form action="price.php" method="post" enctype="multipart/form-data">
                                                                                                                                      <input type="file" name="prc">
                                                                                                                                      <input type="hidden" name="prr" value="1">
                                                                                                                                      <input type="submit" value="Отправить">
                                                                                                                                      </form>
                                                                                                                                      Цитата salieri @
                                                                                                                                      куда передавать путь к файлу на жёстком диске?
                                                                                                                                      :fool: :lool:

                                                                                                                                      скрипту до твоего жёсткого диска — как мне до проблем зулусской космонавтики... передавать нужно не путь, а содержимое файла!

                                                                                                                                      вот Яндекс: "http post file формат сообщения"
                                                                                                                                      первый документ в выдаче, раздел 3.2
                                                                                                                                        Вопрос с отправкой файла решён!
                                                                                                                                        Всем огромное спасибо!
                                                                                                                                        Извините, что пишу так поздно, просто вспомнил, что есть тема тут, надо поделиться решением.
                                                                                                                                        На него ушло несколько дней.

                                                                                                                                        Файл, который я отправляю на сервер, я прикрепил к письму.
                                                                                                                                        Вроде, ещё нужно, наверное, случайным образом Boundary получать, но это отдельный вопрос. Пока и так работает всё.

                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          Option Explicit
                                                                                                                                           
                                                                                                                                          Private Const INTERNET_AUTODIAL_FORCE_ONLINE As Long = 1
                                                                                                                                          Private Const INTERNET_OPEN_TYPE_PRECONFIG  As Long = 0
                                                                                                                                          Private Const INTERNET_DEFAULT_HTTP_PORT    As Long = 80
                                                                                                                                          Private Const INTERNET_SERVICE_HTTP         As Long = 3
                                                                                                                                          Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
                                                                                                                                          Private Const HTTP_ADDREQ_FLAG_REPLACE      As Long = &H80000000
                                                                                                                                          Private Const HTTP_ADDREQ_FLAG_ADD          As Long = &H20000000
                                                                                                                                           Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Private Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" (ByVal hHttpRequest As Long, lpBuffersIn As INTERNET_BUFFERS, ByVal lpBuffersOut As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
                                                                                                                                           
                                                                                                                                          Private Declare Function InternetAutodial Lib "wininet.dll" (ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
                                                                                                                                          Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
                                                                                                                                          Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
                                                                                                                                          Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
                                                                                                                                          Private Declare Function HttpAddRequestHeaders Lib "wininet.dll" Alias "HttpAddRequestHeadersA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lModifiers As Long) As Long
                                                                                                                                          Private Declare Function HttpSendRequest Lib "wininet.dll" Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal sOptional As String, ByVal lOptionalLength As Long) As Long
                                                                                                                                          Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Long
                                                                                                                                           Private Declare Function HttpQueryInfo Lib "wininet.dll" Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, ByVal lInfoLevel As Long, ByRef sBuffer As Any, ByRef lBufferLength As Long, ByRef lIndex As Long) As Integer
                                                                                                                                          Private Declare Function HttpEndRequest Lib "wininet.dll" Alias "HttpEndRequestA" (ByVal hHttpRequest As Long, ByVal lpBuffersOut As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
                                                                                                                                           
                                                                                                                                          Private Declare Function InternetWriteFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumberOfBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
                                                                                                                                          Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Private Const HTTP_QUERY_CONTENT_TYPE = 1
                                                                                                                                          Private Const HTTP_QUERY_CONTENT_LENGTH = 5
                                                                                                                                          Private Const HTTP_QUERY_EXPIRES = 10
                                                                                                                                          Private Const HTTP_QUERY_LAST_MODIFIED = 11
                                                                                                                                          Private Const HTTP_QUERY_PRAGMA = 17
                                                                                                                                          Private Const HTTP_QUERY_VERSION = 18
                                                                                                                                          Private Const HTTP_QUERY_STATUS_CODE = 19
                                                                                                                                          Private Const HTTP_QUERY_STATUS_TEXT = 20
                                                                                                                                          Private Const HTTP_QUERY_RAW_HEADERS = 21
                                                                                                                                          Private Const HTTP_QUERY_RAW_HEADERS_CRLF = 22
                                                                                                                                          Private Const HTTP_QUERY_FORWARDED = 30
                                                                                                                                          Private Const HTTP_QUERY_SERVER = 37
                                                                                                                                          Private Const HTTP_QUERY_USER_AGENT = 39
                                                                                                                                          Private Const HTTP_QUERY_SET_COOKIE = 43
                                                                                                                                          Private Const HTTP_QUERY_REQUEST_METHOD = 45
                                                                                                                                          Private Const HTTP_STATUS_DENIED = 401
                                                                                                                                          Private Const HTTP_STATUS_PROXY_AUTH_REQ = 407
                                                                                                                                          Private Const HSR_INITIATE = &H8
                                                                                                                                           
                                                                                                                                          'Private Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" (ByVal hHttpRequest As Long, lpBuffersIn As INTERNET_BUFFERS, ByVal lpBuffersOut As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Private Type INTERNET_BUFFERS
                                                                                                                                          dwStructSize As Long
                                                                                                                                          Next As Long
                                                                                                                                          lpcszHeader As Long
                                                                                                                                          dwHeadersLength As Long
                                                                                                                                          dwHeadersTotal As Long
                                                                                                                                          lpvBuffer As Long
                                                                                                                                          dwBufferLength As Long
                                                                                                                                          dwBufferTotal As Long
                                                                                                                                          dwOffsetLow As Long
                                                                                                                                          dwOffsetHigh As Long
                                                                                                                                          End Type
                                                                                                                                           
                                                                                                                                          Function TranslateErrorCode(ByVal lErrorCode As Long) As String
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Select Case lErrorCode
                                                                                                                                              Case 12001: TranslateErrorCode = "No more handles could be generated at this Time "
                                                                                                                                              Case 12002: TranslateErrorCode = "The request has timed out."
                                                                                                                                              Case 12003: TranslateErrorCode = "An extended error was returned from the server."
                                                                                                                                              Case 12004: TranslateErrorCode = "An internal error has occurred."
                                                                                                                                              Case 12005: TranslateErrorCode = "The URL is invalid."
                                                                                                                                              Case 12006: TranslateErrorCode = "The URL scheme could not be recognized, or is not supported."
                                                                                                                                              Case 12007: TranslateErrorCode = "The server name could not be resolved."
                                                                                                                                              Case 12008: TranslateErrorCode = "The requested protocol could not be located."
                                                                                                                                              Case 12009: TranslateErrorCode = "A request to InternetQueryOption or InternetSetOption specified an invalid option value."
                                                                                                                                              Case 12010: TranslateErrorCode = "The length of an option supplied to InternetQueryOption or InternetSetOption is incorrect for the type of option specified."
                                                                                                                                              Case 12011: TranslateErrorCode = "The request option can not be set, only queried. "
                                                                                                                                              Case 12012: TranslateErrorCode = "The Win32 Internet support is being shutdown or unloaded."
                                                                                                                                              Case 12013: TranslateErrorCode = "The request to connect and login to an FTP server could not be completed because the supplied user name is incorrect."
                                                                                                                                              Case 12014: TranslateErrorCode = "The request to connect and login to an FTP server could not be completed because the supplied password is incorrect. "
                                                                                                                                              Case 12015: TranslateErrorCode = "The request to connect to and login to an FTP server failed."
                                                                                                                                              Case 12016: TranslateErrorCode = "The requested operation is invalid. "
                                                                                                                                              Case 12017: TranslateErrorCode = "The operation was canceled, usually because the handle on which the request was operating was closed before the operation completed."
                                                                                                                                              Case 12018: TranslateErrorCode = "The type of handle supplied is incorrect for this operation."
                                                                                                                                              Case 12019: TranslateErrorCode = "The requested operation can not be carried out because the handle supplied is not in the correct state."
                                                                                                                                              Case 12020: TranslateErrorCode = "The request can not be made via a proxy."
                                                                                                                                              Case 12021: TranslateErrorCode = "A required registry value could not be located. "
                                                                                                                                              Case 12022: TranslateErrorCode = "A required registry value was located but is an incorrect type or has an invalid value."
                                                                                                                                              Case 12023: TranslateErrorCode = "Direct network access cannot be made at this time. "
                                                                                                                                              Case 12024: TranslateErrorCode = "An asynchronous request could not be made because a zero context value was supplied."
                                                                                                                                              Case 12025: TranslateErrorCode = "An asynchronous request could not be made because a callback function has not been set."
                                                                                                                                              Case 12026: TranslateErrorCode = "The required operation could not be completed because one or more requests are pending."
                                                                                                                                              Case 12027: TranslateErrorCode = "The format of the request is invalid."
                                                                                                                                              Case 12028: TranslateErrorCode = "The requested item could not be located."
                                                                                                                                              Case 12029: TranslateErrorCode = "The attempt to connect to the server failed."
                                                                                                                                              Case 12030: TranslateErrorCode = "The connection with the server has been terminated."
                                                                                                                                              Case 12031: TranslateErrorCode = "The connection with the server has been reset."
                                                                                                                                              Case 12036: TranslateErrorCode = "The request failed because the handle already exists."
                                                                                                                                              Case Else: TranslateErrorCode = "Error details not available."
                                                                                                                                          End Select
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          End Function
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Private Function getQueryOption(info As String, hHttpOpenRequest As Long) As String
                                                                                                                                              Dim sBuffer         As String * 1024
                                                                                                                                              Dim lBufferLength   As Long
                                                                                                                                              Dim intRes As Integer
                                                                                                                                           
                                                                                                                                              sBuffer = vbNullString
                                                                                                                                              lBufferLength = Len(sBuffer)
                                                                                                                                              intRes = HttpQueryInfo(hHttpOpenRequest, info, ByVal sBuffer, lBufferLength, 0)
                                                                                                                                              If intRes > 0 Then
                                                                                                                                                  getQueryOption = sBuffer
                                                                                                                                              Else
                                                                                                                                                  getQueryOption = vbNullString
                                                                                                                                              End If
                                                                                                                                          End Function
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Private Function HttpPostFromFile(ByVal FileNameToSend As String, _
                                                                                                                                                                          ByRef ReturnString As String, _
                                                                                                                                                                          ByRef result As HTTPTransactionResult) As Boolean
                                                                                                                                           
                                                                                                                                                                      
                                                                                                                                              
                                                                                                                                              
                                                                                                                                              On Local Error GoTo error_handler
                                                                                                                                              Dim hInternetOpen As Long
                                                                                                                                              Dim hInternetConnect As Long
                                                                                                                                              Dim hHttpOpenRequest As Long
                                                                                                                                              Dim bRet As Boolean
                                                                                                                                              Dim lret As Long
                                                                                                                                              Dim iret As Integer
                                                                                                                                              Dim filenumb As Integer
                                                                                                                                              Dim macchina As String
                                                                                                                                              Dim doc As String
                                                                                                                                              Dim BufferIn As INTERNET_BUFFERS
                                                                                                                                              Dim abBin() As Byte
                                                                                                                                           
                                                                                                                                              Dim sbinfile As String
                                                                                                                                              Dim nbinfile As Integer
                                                                                                                                              Dim dwpostsize As Long
                                                                                                                                              Dim n As Long
                                                                                                                                              Dim letti As Long
                                                                                                                                              Dim pbuffer As String
                                                                                                                                              Dim MyOffset As Long
                                                                                                                                              Dim chunks As Long
                                                                                                                                              Dim BytesRemain As Long
                                                                                                                                              Dim ChunkLen As Long
                                                                                                                                              Dim bDoLoop             As Boolean
                                                                                                                                              Dim sReadBuffer         As String * 2048
                                                                                                                                              Dim lNumberOfBytesRead  As Long
                                                                                                                                              Dim sHeader As String
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Dim sBoundary As String
                                                                                                                                           
                                                                                                                                           
                                                                                                                                              'Definitions
                                                                                                                                              ChunkLen = 2048
                                                                                                                                           
                                                                                                                                            '  On Error GoTo error_handler
                                                                                                                                              hInternetOpen = 0
                                                                                                                                              hInternetConnect = 0
                                                                                                                                              hHttpOpenRequest = 0
                                                                                                                                              result.strRETURN_ERROR = vbNullString
                                                                                                                                              result.intRETURN_ERROR = 0
                                                                                                                                            '  macchina = URLToMachineName(documento)
                                                                                                                                            '  doc = URLToPathFileName(documento)
                                                                                                                                          hInternetOpen = InternetOpen("", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
                                                                                                                                          Label1(0).Caption = hInternetOpen
                                                                                                                                              If hInternetOpen = 0 Then
                                                                                                                                                  result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                  result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                  HttpPostFromFile = False
                                                                                                                                              Else 'internetopen ok
                                                                                                                                          hInternetConnect = InternetConnect(hInternetOpen, "www.***.ru", INTERNET_DEFAULT_HTTP_PORT, "", "", INTERNET_SERVICE_HTTP, 0, 0)
                                                                                                                                              Label1(1).Caption = hInternetConnect
                                                                                                                                                  If hInternetConnect = 0 Then
                                                                                                                                                      result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                      result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                      HttpPostFromFile = False
                                                                                                                                                  Else 'internetConnect Ok
                                                                                                                                          'hHttpOpenRequest = HttpOpenRequest(hInternetConnect, "POST", "/http_in.php", "HTTP/1.0", vbNullString, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0)
                                                                                                                                              hHttpOpenRequest = HttpOpenRequest(hInternetConnect, "POST", "/http_in.php", "HTTP/1.0", vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
                                                                                                                                              
                                                                                                                                                  
                                                                                                                                                   Label1(2).Caption = hHttpOpenRequest
                                                                                                                                                      If hHttpOpenRequest = 0 Then
                                                                                                                                                          result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                          result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                          HttpPostFromFile = False
                                                                                                                                                      Else 'HTTPopenrequest OK
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                          sBoundary = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
                                                                                                                                          sHeader = "Content-Type: multipart/form-data; boundary=" & sBoundary & vbCrLf
                                                                                                                                              
                                                                                                                                          'rslt2 = HttpAddRequestHeaders(hRequest, sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE Or HTTP_ADDREQ_FLAG_ADD)
                                                                                                                                          '    Label1(4).Caption = rslt2
                                                                                                                                           
                                                                                                                                           
                                                                                                                                              '--- post data
                                                                                                                                           
                                                                                                                                                          
                                                                                                                                                            sbinfile = FileNameToSend
                                                                                                                                                          
                                                                                                                                                       ' Text2.Text = "--" & sBoundary & vbCrLf & _
                                                                                                                                          "Content-Disposition: multipart/form-data; name=""upfile""; filename=""" & Mid$(sbinfile, InStrRev(sbinfile, "\") + 1) & """" & vbCrLf & _
                                                                                                                                          "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
                                                                                                                                          "SOD" & vbCrLf & "--" & sBoundary & "--"
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                          
                                                                                                                                                    '      sHeader = "Content-Type: application/x-octet-stream" & vbCrLf
                                                                                                                                                          iret = HttpAddRequestHeaders(hHttpOpenRequest, _
                                                                                                                                                                                       sHeader, _
                                                                                                                                                                                       Len(sHeader), _
                                                                                                                                                                                       HTTP_ADDREQ_FLAG_REPLACE Or _
                                                                                                                                                                                       HTTP_ADDREQ_FLAG_ADD)
                                                                                                                                                   Label1(3).Caption = iret
                                                                                                                                                          If iret = 0 Then
                                                                                                                                                              result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                              result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                              HttpPostFromFile = False
                                                                                                                                                          Else 'HttpAddRequestHeaders ok
                                                                                                                                                              
                                                                                                                                                              sbinfile = FileNameToSend
                                                                                                                                                              nbinfile = FreeFile
                                                                                                                                                              Open sbinfile For Binary Access Read Lock Write As #nbinfile
                                                                                                                                           
                                                                                                                                          '
                                                                                                                                           
                                                                                                                                                              ReDim abBin(ChunkLen)
                                                                                                                                              dwpostsize = LOF(nbinfile)
                                                                                                                                                              
                                                                                                                                             ' Close #nbinfile
                                                                                                                                              
                                                                                                                                                              BufferIn.dwStructSize = 40   ' Must be set or error will occur
                                                                                                                                                              BufferIn.Next = 0
                                                                                                                                                              BufferIn.lpcszHeader = 0
                                                                                                                                                              BufferIn.dwHeadersLength = 0
                                                                                                                                                              BufferIn.dwHeadersTotal = 0
                                                                                                                                                              BufferIn.lpvBuffer = 0
                                                                                                                                                              BufferIn.dwBufferLength = 0
                                                                                                                                                              BufferIn.dwBufferTotal = dwpostsize 'This is the only member used other than dwStructSize
                                                                                                                                                              BufferIn.dwOffsetLow = 0
                                                                                                                                                              BufferIn.dwOffsetHigh = 0
                                                                                                                                                              'HSR_INITIATE try with the second last param.
                                                                                                                                          bRet = HttpSendRequestEx(hHttpOpenRequest, BufferIn, 0, 0, 0)
                                                                                                                                               Label1(4).Caption = bRet
                                                                                                                                                              If (bRet = False) Then
                                                                                                                                                                  result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                  result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                  HttpPostFromFile = False
                                                                                                                                                              Else 'SendRequestEx ok
                                                                                                                                                                  
                                                                                                                                                                  
                                                                                                                                                         '      nbinfile = FreeFile
                                                                                                                                                         '     Open sbinfile For Binary Access Read Lock Write As #nbinfile
                                                                                                                                                                
                                                                                                                                                                  
                                                                                                                                                                  chunks = dwpostsize \ ChunkLen
                                                                                                                                                                  BytesRemain = dwpostsize - (chunks * ChunkLen)
                                                                                                                                                                  MyOffset = 1
                                                                                                                                                                  n = 0
                                                                                                                                                                  bRet = True
                                                                                                                                                                  Dim RealChunkLen As Long
                                                                                                                                                                  RealChunkLen = 0
                                                                                                                                                                  While (n < chunks) And (bRet = True)
                                                                                                                                                                      Get #nbinfile, MyOffset, abBin
                                                                                                                                                                      pbuffer = StrConv(abBin, vbUnicode)
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          'pbuffer = "--" & sBoundary & vbCrLf & _
                                                                                                                                          "Content-Disposition: multipart/form-data; name=""upfile""; filename=""" & Mid$(sbinfile, InStrRev(sbinfile, "\") + 1) & """" & vbCrLf & _
                                                                                                                                          "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
                                                                                                                                          StrConv(abBin, vbUnicode) & vbCrLf & "--" & sBoundary & "--"
                                                                                                                                           
                                                                                                                                           
                                                                                                                                           
                                                                                                                                                                      bRet = InternetWriteFile(hHttpOpenRequest, _
                                                                                                                                                                                              pbuffer, _
                                                                                                                                                                                              ChunkLen, _
                                                                                                                                                                                              letti)
                                                                                                                                                                      n = n + 1
                                                                                                                                                                      Text1.Text = Text1.Text & "send " & n
                                                                                                                                           
                                                                                                                                                                      MyOffset = 1 + (n * ChunkLen)
                                                                                                                                                                  Wend
                                                                                                                                                                  
                                                                                                                                                                 Label1(5).Caption = bRet
                                                                                                                                                                  If bRet = False Then
                                                                                                                                                                      result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                      result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                      HttpPostFromFile = False
                                                                                                                                                                  Else 'all internetwritefile (- the last) ok
                                                                                                                                                                      ReDim abBin(BytesRemain)
                                                                                                                                                                      Get #nbinfile, MyOffset, abBin
                                                                                                                                                                      pbuffer = StrConv(abBin, vbUnicode) ' & vbCrLf & "--" & sBoundary & "--"
                                                                                                                                                                      'pbuffer = pbuffer & "--AaBbCcDd00--"
                                                                                                                                                                      
                                                                                                                                                                      bRet = InternetWriteFile(hHttpOpenRequest, _
                                                                                                                                                                                                  pbuffer, _
                                                                                                                                                                                                  BytesRemain, _
                                                                                                                                                                                                  letti)
                                                                                                                                           
                                                                                                                                                                      Close #nbinfile
                                                                                                                                                            Label1(6).Caption = bRet
                                                                                                                                                                      If bRet = False Then
                                                                                                                                                                          result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                          result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                          HttpPostFromFile = False
                                                                                                                                                                      Else 'the last internetwritefile ok
                                                                                                                                                                          Dim param As Long
                                                                                                                                                                          param = 0
                                                                                                                                                                          'HSR_INITIATE penultimo
                                                                                                                                                                          lret = HttpEndRequest(hHttpOpenRequest, 0, 0, 0)
                                                                                                                                          Label1(7).Caption = lret
                                                                                                                                                                          If lret = 0 Then
                                                                                                                                           
                                                                                                                                                                              result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                              result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                              HttpPostFromFile = False
                                                                                                                                                                          Else 'HttpEndRequest ok
                                                                                                                                                                              result.HTTP_QUERY_CONTENT_TYPE = getQueryOption(HTTP_QUERY_CONTENT_TYPE, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_CONTENT_LENGTH = getQueryOption(HTTP_QUERY_CONTENT_LENGTH, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_LAST_MODIFIED = getQueryOption(HTTP_QUERY_LAST_MODIFIED, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_PRAGMA = getQueryOption(HTTP_QUERY_PRAGMA, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_EXPIRES = getQueryOption(HTTP_QUERY_EXPIRES, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_VERSION = getQueryOption(HTTP_QUERY_VERSION, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_STATUS_CODE = getQueryOption(HTTP_QUERY_STATUS_CODE, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_STATUS_TEXT = getQueryOption(HTTP_QUERY_STATUS_TEXT, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_RAW_HEADERS = getQueryOption(HTTP_QUERY_RAW_HEADERS, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_RAW_HEADERS_CRLF = getQueryOption(HTTP_QUERY_RAW_HEADERS_CRLF, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_FORWARDED = getQueryOption(HTTP_QUERY_FORWARDED, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_SERVER = getQueryOption(HTTP_QUERY_SERVER, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_USER_AGENT = getQueryOption(HTTP_QUERY_USER_AGENT, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_SET_COOKIE = getQueryOption(HTTP_QUERY_SET_COOKIE, hHttpOpenRequest)
                                                                                                                                                                              result.HTTP_QUERY_REQUEST_METHOD = getQueryOption(HTTP_QUERY_REQUEST_METHOD, hHttpOpenRequest)
                                                                                                                                                                              If (Val(result.HTTP_QUERY_STATUS_CODE) <> 200) Then
                                                                                                                                                                                  result.intRETURN_ERROR = Val(result.HTTP_QUERY_STATUS_CODE)
                                                                                                                                                                                  result.strRETURN_ERROR = result.HTTP_QUERY_STATUS_TEXT
                                                                                                                                                                                  HttpPostFromFile = False
                                                                                                                                                                              Else 'Not 200
                                                                                                                                                                                  bDoLoop = True
                                                                                                                                                                                  While bDoLoop = True And bRet = True
                                                                                                                                                                                      sReadBuffer = vbNullString
                                                                                                                                                                                      bRet = InternetReadFile(hHttpOpenRequest, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
                                                                                                                                                                                      ReturnString = ReturnString & Left(sReadBuffer, lNumberOfBytesRead)
                                                                                                                                                                                      If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
                                                                                                                                                                                  Wend
                                                                                                                                                                             Label1(8).Caption = bRet
                                                                                                                                                                                  If (bRet = False) Then
                                                                                                                                                                                      result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                                      result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                                      HttpPostFromFile = False
                                                                                                                                                                                  Else 'InternetReadFile Ok
                                                                                                                                                                                      result.intRETURN_ERROR = 0
                                                                                                                                                                                      result.strRETURN_ERROR = vbNullString
                                                                                                                                                                                      HttpPostFromFile = True
                                                                                                                                                                                  End If
                                                                                                                                                                              End If ' Not 200
                                                                                                                                                                          End If 'HttpEndRequest
                                                                                                                                                                      End If 'last internetwritefile
                                                                                                                                                                  End If 'all the InternetWriteFile (- the last)
                                                                                                                                                              End If 'SendRequestEx
                                                                                                                                                              bRet = InternetCloseHandle(hHttpOpenRequest)
                                                                                                                                                              If (bRet = False) Then
                                                                                                                                                                  result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                                  result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                                  HttpPostFromFile = False
                                                                                                                                                              End If
                                                                                                                                                          End If 'HttpAddRequestHeaders ok
                                                                                                                                                      End If 'HTTPopenrequest
                                                                                                                                                      bRet = InternetCloseHandle(hInternetConnect)
                                                                                                                                                      If (bRet = False) Then
                                                                                                                                                          result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                          result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                          HttpPostFromFile = False
                                                                                                                                                      End If
                                                                                                                                                  End If 'InternetConnect
                                                                                                                                                  bRet = InternetCloseHandle(hInternetOpen)
                                                                                                                                                  If (bRet = False) Then
                                                                                                                                                      result.intRETURN_ERROR = Err.LastDllError
                                                                                                                                                      result.strRETURN_ERROR = TranslateErrorCode(CLng(result.intRETURN_ERROR))
                                                                                                                                                      HttpPostFromFile = False
                                                                                                                                                  End If
                                                                                                                                              End If 'InternetOpen
                                                                                                                                              Exit Function
                                                                                                                                          error_handler:
                                                                                                                                                  result.strRETURN_ERROR = Err.Description
                                                                                                                                                  result.intRETURN_ERROR = Err.Number
                                                                                                                                                  HttpPostFromFile = False
                                                                                                                                           
                                                                                                                                                  Exit Function
                                                                                                                                          End Function
                                                                                                                                           
                                                                                                                                          Private Sub Form_Load()
                                                                                                                                           
                                                                                                                                          Dim rslt As HTTPTransactionResult
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          Me.Caption = HttpPostFromFile(App.Path & "\123456.txt", Text1.Text, rslt)
                                                                                                                                           
                                                                                                                                           
                                                                                                                                          End Sub

                                                                                                                                        Прикреплённый файлПрикреплённый файл123456.txt (26,61 Кбайт, скачиваний: 167)
                                                                                                                                        Сообщение отредактировано: salieri -
                                                                                                                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                        0 пользователей:


                                                                                                                                        Рейтинг@Mail.ru
                                                                                                                                        [ Script execution time: 0,1477 ]   [ 22 queries used ]   [ Generated: 25.04.24, 06:25 GMT ]