<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: заполнение Web-форм]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=158</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=158&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: заполнение Web-форм».]]></description>
		<lastBuildDate>Tue, 05 Feb 2008 11:45:24 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=8681#p8681</link>
			<description><![CDATA[<p><strong>(!) Внимание</strong> В класс внесено существенное исправление функции кодирования данных полей. Ранее не ASCII символы отправлялись неверно.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 05 Feb 2008 11:45:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=8681#p8681</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=8233#p8233</link>
			<description><![CDATA[<p>Решил тут попользоваться собственным творением и нашёл несколько багов и возможностей для упрощения и улучшения. <img src="//forum.script-coding.com/img/smilies/roll.png" width="15" height="15" /> Так что теперь WebFormClass v.3.0 ))</p><p>1) Убрал ненужную функцию конвертации и использование Scripting.Dictionary, что значительно сократило код.&nbsp; <br />2) Расписал свойства и методы формы.&nbsp; </p><div class="codebox"><pre><code>&#039;Описание класса WebFormClass 
    
&#039;Пример создания: &quot;Set WebForm = New WebFormClass&quot; 
    
&#039;Form.Action             &#039; Свойство - URL на который будут отправлены данные. (чтение/запись) 
&#039;Form.AddField           &#039; Процедура - Добавление поля. 
&#039;Form.AddFile            &#039; Процедура - Добавление файла. 
&#039;Form.Boundary           &#039; Свойство - Разделитель между данными (чтение) 
&#039;Form.Enctype            &#039; Свойство - Тип кодирования формы (Для отправки полей - &quot;application/x-www-form-urlencoded&quot;. Для отправки полей и файлов - &quot;multipart/form-data&quot;) (чтение/запись) 
&#039;Form.Method             &#039; Свойство - Метод отправки данных (GET / POST) 
&#039;Form.VarBody            &#039; Свойство - Сформированные данные для отправки (чтение/запись) 

&#039;Пример отправки файла на сайт http://www.zalil.ru 
    
Dim WebForm 
&#039;/// Создаём новый класс формы 
Set WebForm = New WebFormClass 
&#039;/// Указываем куда будем отправлять данные 
WebForm.Action = &quot;http://www.zalil.ru/upload/&quot; 
&#039;/// Устанавливаем метод передачи POST 
WebForm.Method = &quot;POST&quot; 
&#039;/// Для того чтобы передались файлы устанавливаем тип кодирования multipart/form-data 
WebForm.Enctype = &quot;multipart/form-data&quot; 
&#039;/// Добавляем файл 
WebForm.AddFile &quot;file&quot;, &quot;C:\boot.ini&quot; 
&#039;/// Запускаем процедуру отправку     
Submit WebForm

Sub Submit(WebForm) 
    &#039;/// Создаём объект отправки данных 
    Dim XMLHTTP 
    Set XMLHTTP = CreateObject(&quot;MSXML2.XMLHTTP&quot;) 
    &#039;/// Открываем соединение с URL 
    XMLHTTP.Open WebForm.Method, WebForm.Action, False 
    &#039;/// Если тип передачи данных POST, то добавляем к пакету заголовки 

    &#039;/// Если отправляем с кодированием &quot;multipart/form-data&quot;, то добавляем информацию о разделителе данных 
    If WebForm.Method = &quot;POST&quot; Then XMLHTTP.setrequestheader &quot;Content-type&quot;, WebForm.Enctype &#039;&amp; &quot;; boundary=&quot; &amp; WebForm.Boundary 
    
    &#039;/// Отправляем запрос 
    XMLHTTP.Send WebForm.VarBody 
    &#039;/// Смотрим статус ответа 
    Select Case XMLHTTP.Status 
    &#039;/// Если 200 - OK. Данные переданы успешно 
    Case 200 
        Dim InternetExplorer 
        Set InternetExplorer = CreateObject(&quot;InternetExplorer.Application&quot;) 
        InternetExplorer.Visible = True 
        InternetExplorer.Navigate &quot;about:blank&quot; 
        Do 
                        WScript.Sleep 100 
        Loop Until InternetExplorer.readystate = 4 
        InternetExplorer.document.write XMLHTTP.responsetext 
    Case Else 
        MsgBox XMLHTTP.Status &amp; &quot; &quot; &amp; StatusText, vbCritical, &quot;Ошибка при передаче данных !&quot; 
    End Select 
End Sub 


&#039;/// Класс формы 
Class WebFormClass
    &#039;/// Класс формы
    Private Fields, Files
    Private PropertyEnctype, PropertyMethod, PropertyBoundary, PropertyAction

    Private Sub Class_Initialize()
        Fields = Array()
        Files = Array()
        PropertyEnctype = &quot;application/x-www-form-urlencoded&quot;
        PropertyMethod = &quot;GET&quot;
        PropertyBoundary = String(27, &quot;-&quot;) &amp; GenerateBoundary
        PropertyAction = &quot;about:blank&quot;
    End Sub

    Public Property Let Action(Value)
        PropertyAction = Value
    End Property

    Public Property Get Action()
        Action = PropertyAction
        If PropertyMethod = &quot;GET&quot; Then
            Dim Params
            Params = VarBody
            If VarBody &lt;&gt; &quot;&quot; Then Action = Action &amp; &quot;?&quot; &amp; Params
        End If
    End Property

    Public Property Get Boundary()
        Boundary = PropertyBoundary
    End Property

    Public Property Get Method()
        Method = PropertyMethod
    End Property

    Public Property Let Method(Value)
        Value = UCase(Value)
        If Value = &quot;GET&quot; Or Value = &quot;POST&quot; Then PropertyMethod = Value
    End Property

    Public Property Get Enctype()
        Enctype = PropertyEnctype
        If PropertyEnctype = &quot;multipart/form-data&quot; Then Enctype = Enctype &amp; &quot;; boundary=&quot; &amp; PropertyBoundary
    End Property

    Public Property Let Enctype(Value)
        Value = LCase(Value)
        If Value = &quot;multipart/form-data&quot; Or Value = &quot;application/x-www-form-urlencoded&quot; Then PropertyEnctype = Value
    End Property

    Public Sub AddField(Name, Value)
        ReDim Preserve Fields(UBound(Fields) + 1)
        Fields(UBound(Fields)) = Array(Name, Value)
    End Sub

    Public Sub AddFile(Name, Value)
        ReDim Preserve Files(UBound(Files) + 1)
        Files(UBound(Files)) = Array(Name, Value)
    End Sub
      

    Public Property Get VarBody()
        If PropertyMethod = &quot;POST&quot; And PropertyEnctype = &quot;multipart/form-data&quot; Then
            Const DefaultBoundary = &quot;--&quot;
            Dim Stream
            Set Stream = CreateObject(&quot;ADODB.Stream&quot;)
            Stream.Type = 2
            Stream.Mode = 3
            Stream.Charset = &quot;Windows-1251&quot;
            Stream.Open
            
            Dim FieldHeader, FieldsBody
            
            For Each Field In Fields
                FieldHeader = &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; &amp; Field(0) &amp; &quot;&quot;&quot;&quot;
                FieldsBody = FieldsBody &amp; DefaultBoundary &amp; PropertyBoundary &amp; vbCrLf &amp; FieldHeader &amp; vbCrLf &amp; Field(1) &amp; vbCrLf
            Next
            
            Stream.WriteText FieldsBody
            
            Dim FileHeader
            
            For Each File In Files
                If LoadFile(File(1), Data) Then
                    FileHeader = DefaultBoundary &amp; Boundary &amp; vbCrLf &amp; &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; &amp; File(0) &amp; &quot;&quot;&quot;; filename=&quot;&quot;&quot; &amp; File(1) &amp; &quot;&quot;&quot;&quot; &amp; vbCrLf &amp; &quot;Content-Type: octet/stream&quot; &amp; vbCrLf &amp; vbCrLf
                    Stream.WriteText FileHeader
                    Stream.Position = 0
                    Stream.Type = 1
                    Stream.Position = Stream.Size
                    Stream.write Data
                    Stream.Position = 0
                    Stream.Type = 2
                    Stream.Position = Stream.Size
                End If
            Next
            
            Stream.Position = 0
            Stream.Type = 2
            Stream.Position = Stream.Size
            Stream.WriteText vbCrLf &amp; DefaultBoundary &amp; PropertyBoundary &amp; DefaultBoundary
            
            Stream.Position = 0
            Stream.Type = 1
            
            VarBody = Stream.Read
        Else
            For Each Field In Fields
                VarBody = VarBody &amp; URLEncode(Field(0)) &amp; &quot;=&quot; &amp; URLEncode(Field(1)) &amp; &quot;&amp;&quot;
            Next
            For Each File In Files
                VarBody = VarBody &amp; URLEncode(File(0)) &amp; &quot;=&quot; &amp; URLEncode(File(1)) &amp; &quot;&amp;&quot;
            Next
            If Len(VarBody) &gt; 0 Then VarBody = Left(VarBody, Len(VarBody) - 1)
        End If
    End Property

    Private Function URLEncode(Data)
        Dim CharPosition, CharCode
        For CharPosition = 1 To Len(Data)
            CharCode = Asc(Mid(Data, CharPosition, 1))
            If CharCode = 32 Then
                URLEncode = URLEncode + &quot;+&quot;
            ElseIf (CharCode &lt; 48 Or CharCode &gt; 126) Or (CharCode &gt; 56 And CharCode &lt;= 64) Then
                URLEncode = URLEncode + &quot;%&quot; + Right(&quot;0&quot; &amp; Hex(CharCode), 2)
            Else
                URLEncode = URLEncode + Chr(CharCode)
            End If
        Next
    End Function

    Private Function LoadFile(Path, Data)
        On Error Resume Next
        Dim Stream
        Set Stream = CreateObject(&quot;ADODB.Stream&quot;)
        Stream.Type = 1
        Stream.Mode = 3
        Stream.Open
        Stream.LoadFromFile Path
        If Err.Number &lt;&gt; 0 Then Exit Function
        Data = Stream.Read
        LoadFile = True
    End Function

    Private Function GenerateBoundary()
        Dim Char
        Dim N, Start
        Const Chars = &quot;abcdefghijklmnopqrstuvxyz0123456789&quot;
        Randomize
        For N = 1 To 12
            Start = CLng(Rnd * (Len(Chars) - 1)) + 1
            Char = Mid(Chars, Start, 1)
            If Start Mod 2 Then Char = UCase(Char)
            GenerateBoundary = GenerateBoundary &amp; Char
        Next
    End Function
End Class</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 23 Jan 2008 14:04:03 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=8233#p8233</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=7551#p7551</link>
			<description><![CDATA[<p>Пример автоматической закачки файла на сайт <a href="http://www.zalil.ru">http://www.zalil.ru</a>. Скрипт отправляет файл C:\boot.ini методом POST и выдаёт окно InternetExplorer со ссылкой на файл.</p><p>Можно отправлять форму двумя типами кодирования: &quot;application/x-www-form-urlencoded&quot; - для отправки полей формы методом POST и &quot;multipart/form-data&quot; - для отправки файлов. Класс формы независим от компонентов передачи данных (таких, как XmlHttp и WinHttpRequest, или других компонентов, имеющих аналогичные возможности). Можно отправлять данные в любой кодировке.<br /></p><div class="codebox"><pre><code>&#039;/// Создаём новый класс формы
Set Form = New HttpFormClass
&#039;/// Отправлять будем на сайт www.zalil.ru
Form.Action = &quot;http://www.zalil.ru/upload/&quot;
&#039;/// Т.к нужно отправить файлы, то указываем метод - POST
Form.Method = &quot;POST&quot;
&#039;/// Добавляем файл boot.ini
Form.AddFile &quot;file&quot;,&quot;C:\boot.ini&quot;
&#039;/// Указываем тип кодирования данных формы, необходимый для отправки файлов. 
&#039;/// Если его не указать, то вместо отправки содержимого файлов будут отправлены только их пути
Form.Enctype = &quot;multipart/form-data&quot;

&#039;/// Создаём объект для передачи данных
Set XmlHttp = CreateObject(&quot;MSXML2.XMLHTTP&quot;)

&#039;/// Проверяем каким методом нужно отправить форму
if Form.Method = &quot;GET&quot; Then
    &#039;/// Получаем содерживое VarBody
    VarBody = Form.VarBody 
    &#039;/// Если форма отправляется GET-ом то VarBody нужно присоединить к URL
    If VarBody &lt;&gt; &quot;&quot; Then
        Form.Action = Form.Action &amp; &quot;?&quot; &amp; VarBody
        &#039;/// В итоге получаем URL типа URL?param1=value&amp;param2=value
    End if
End if

&#039;/// Открываем Request. Последний параметр в примере поставлен в False. 
&#039;/// Таким образом отключена асинхронность передачи данных. Это сделано для упрощения примера. 
XMLHttp.Open Form.Method,Form.Action,False

&#039;/// Если метод &quot;POST&quot;, то добавляем заголовок к отправляемым данным 
&#039;/// Пример:
&#039;/// Content-type: multipart/form-data; boundary=--------------aAbSbIuL, если из формы отправляются файлы
&#039;/// или
&#039;/// Content-type: application/x-www-form-urlencoded, если отправляется обычная форма с полями.
If Form.Method = &quot;POST&quot; Then XMLHttp.setrequestheader &quot;Content-type&quot;,Form.Enctype &amp; &quot;;boundary=&quot; &amp; Form.Boundary


&#039;/// Отправляем запрос
XMLHttp.Send Form.VarBody

&#039;/// Проверяем статус ответа сервера
Select Case XMLHttp.status
Case 200 &#039;OK
    &#039;/// Данные успешно приняты
    &#039;/// Получив данные хорошо бы их просмотреть. Для этого откроем окно InternetExplorer-а
    Set InternetExplorer = CreateObject(&quot;InternetExplorer.Application&quot;)
    &#039;/// Делаем его видимым
    InternetExplorer.Visible = True
    &#039;/// По умолчанию в нём не существует объект Document. Поэтому переводим его на пустую страницу
    InternetExplorer.navigate &quot;about:blank&quot;
    &#039;/// Ждём полной загрузки
    Do
    Loop Until InternetExplorer.readystate = 4
    &#039;/// Заполняем документ полученным содержимым
    InternetExplorer.Document.body.innerhtml = XMLHttp.responsetext
Case Else 
    &#039;/// Остальные статусы рассматриваются как ошибка. 
    &#039;/// Но в принципе есть и статусы, которые не являются ошибкой. К примеру статус редиректа
    MsgBox XMLHttp.StatusText,vbCritical,XMLHttp.status
End Select

&#039;/// Класс HTTP формы
Class HttpFormClass
    &#039;/// Коллекция полей формы
    Private Fields
    &#039;/// Коллекция файлов формы
    Private Files
    &#039;/// Переменные для хранения Property формы
    Private PropEnctype        &#039;/// Типа кодирования
    Private PropAction        &#039;/// URL на который будут отправлены данные
    Private PropMethod        &#039;/// Метод которым будут отправлены данные
    Private PropBoundary    &#039;/// Разделитель которым будут разделены данные
    Private PropCharset        &#039;/// Кодировка в которой данные будут отправлены

    &#039;/// Процедура создания класса
    Private Sub Class_Initialize
        &#039;/// Создаём коллекции для хранения полей и файлов
        Set Fields = CreateObject(&quot;Scripting.Dictionary&quot;)
        Set Files = CreateObject(&quot;Scripting.Dictionary&quot;)
    End Sub 

    &#039;/// Установка Action
    Public Property Let Action(Value)
        PropAction = Value
    End Property
    &#039;/// Чтение Action
    Public Property Get Action
        if PropAction = &quot;&quot; Then PropAction = &quot;about:blank&quot;
        Action = PropAction
    End Property

    &#039;/// Установка Method.
    Public Property Let Method(Value)
        PropMethod = UCase(Value)
    End Property

    &#039;/// Чтение Method. По умолчанию возвращаем GET
    Public Property Get Method
        if PropMethod = &quot;&quot; Then PropMethod = &quot;GET&quot;
        Method = PropMethod
    End Property
    
    &#039;/// Установка Enctype.
    Public Property Let Enctype(Value)
        Value = lCase(Value)
        Select Case Value
        Case &quot;multipart/form-data&quot;
            PropEnctype = Value
        Case Else
            PropEnctype = &quot;application/x-www-form-urlencoded&quot;
        End Select
    End Property

    &#039;/// Чтение Enctype. По умолчанию &quot;application/x-www-form-urlencoded&quot; 
    Public Property Get Enctype
        if PropEnctype = &quot;&quot; Then PropEnctype = &quot;application/x-www-form-urlencoded&quot;
        Enctype = PropEnctype
    End Property

    &#039;/// Установка кодировки отправляемых данных
    Public Property Let Charset(Param)
        PropCharset = Param
    End Property

    &#039;/// По умолчанию Windows-1251
    Public Property Get Charset
        Const DefaultCharset = &quot;Windows-1251&quot;
        if PropCharset = &quot;&quot; Then PropCharset = DefaultCharset
        Charset = PropCharset
    End Property

    &#039;/// Добавление файла
    Function AddFile(FieldName,FileName)
        if FileName = &quot;&quot; Then Exit Function
        &#039;/// Создаём объект стрим(поток)
        Dim Stream
        Set Stream = CreateObject(&quot;ADODB.Stream&quot;)
        &#039;/// Выставляем его тип как двоичный.
        Stream.Type = 1
        &#039;/// Открываем поток
        Stream.Open
        &#039;/// Загружаем необходимый нам файл
        Stream.LoadFromFile FileName
        &#039;/// Складываем путь и файл в массив из двух элементов
        Dim FileContentArray(2)
        &#039;/// В нулевой элемент передаём путь
        FileContentArray(0) = FileName

        &#039;/// Теперь определяет тип файла. И в первый элемент сохраняем тип содержимого.
        Dim FileExtension,DotPosition,ContentType
        &#039;/// Проверяем есть ли у файла расширение и получаем его в переменную.
        DotPosition = InStrRev(FileName,&quot;.&quot;) 
        if DotPosition &gt; 0 Then FileExtension = LCase(mid(FileName,DotPosition + 1))
        &#039;/// Выбираем известные нам типы файлов. Для примера добавлены только несколько.
        Select Case FileExtension
        Case &quot;bmp&quot;,&quot;gif&quot;,&quot;jpeg&quot;,&quot;jpg&quot;,&quot;png&quot;&#039;/// файлы картинок    
            FileContentArray(1) = &quot;image/&quot; &amp; FileExtension
        Case &quot;zip&quot;&#039;/// zip архив                                
            FileContentArray(1) = &quot;application/x-zip-compressed&quot;
        Case &quot;mdb&quot;&#039;/// файл базы данных ACCESS                                
            FileContentArray(1) = &quot;application/msaccess&quot;
        Case &quot;xls&quot;&#039;/// Файл EXCEL                                
            FileContentArray(1) = &quot;application/vnd.ms-excel&quot;
        Case &quot;doc&quot;,&quot;dot&quot;&#039;/// WORD документ                                
            FileContentArray(1) = &quot;application/msword&quot;
        Case Else&#039;/// Для неизвестных файлов делаем заголовок &quot;application/octet-stream&quot;                                
            FileContentArray(1) = &quot;application/octet-stream&quot;
        End Select

        &#039;/// Во второй элемент считываем содержимое
        FileContentArray(2) = Stream.Read

        &#039;/// Передаём созданный массив в коллекцию
        Files(FieldName) = FileContentArray
    End Function
    
    &#039;/// Добавление поля 
    Public Function AddField(Name,Value)
        Fields(Name) = Value
    End Function

    &#039;/// Функция кодирования недопустимых символов в URL.
    Public Function EncodeURIcomponent(SourceString)
        Dim I, C, Out
        For I = 1 To Len(SourceString)
          C = Asc(Mid(SourceString, I, 1))
          &#039;/// Пробелы заменяем на плюс
          If C = 32 Then
            EncodeURIcomponent = EncodeURIcomponent + &quot;+&quot;
            &#039;/// Запрещённые символы заменяем на &quot;%&quot; и HEX значение от кода символа
          ElseIf (C &lt; 48 Or C &gt; 126) Or (C &gt; 56 And C &lt;= 64) Then
            EncodeURIcomponent = EncodeURIcomponent + &quot;%&quot; + Hex(C)
          Else
          &#039;/// Разрещённые символы добавляем как есть
            EncodeURIcomponent = EncodeURIcomponent + Chr(C)
          End If
        Next
    End Function

    &#039;/// Функция генерации разделителей между данными.
    Private Function GenerateBoundary()
        Dim Char
        Dim N
        &#039;/// Запускаем цикл на 12 итераций. Генерим строку из 12 символов
        For N = 1 To 12
            Randomize
            &#039;/// Взяты символы от a-z.
            Char = Chr(CLng(Rnd * 25) + 97)
            &#039;Если порядковый номер символа кратен двум, то делаем его заглавным
            if N mod 2 Then Char = UCase(Char)
            GenerateBoundary = GenerateBoundary &amp; Char
        Next
    End Function
    
    &#039;/// Получение разделителя между данными. Если он не установлен, то генерим его
    Public Property Get Boundary
        if PropBoundary = &quot;&quot; Then PropBoundary = GenerateBoundary
        &#039;/// К началу добавляем 27 символов &quot;-&quot;. Не знаю зачем так много, но IE так делает ))
        Boundary = String(27,&quot;-&quot;) &amp; PropBoundary
    End Property

    &#039;/// Получение 
    Public Property Get VarBody
        &#039;/// Определяем каким методом будут отправляться данные
        Select Case Method
        Case &quot;POST&quot;
            Select Case Enctype
            Case &quot;multipart/form-data&quot;
                &#039;/// Разделитель который добавляется по умолчанию всегда
                Const DefaultBoundary = &quot;--&quot;
    
                &#039;/// Открываем объект стрим на запись
                Dim Stream
                Set Stream = CreateObject(&quot;ADODB.Stream&quot;)
                Stream.Type = 1
                Stream.Mode = 3
                Stream.Open
                
                &#039;/// Если количество полей больше 0 то перебираем их собираем их в одну переменну, добавляя заголовки
                If Fields.Count &gt; 0 Then
                    &#039;/// FieldsBody - контейнер для сбора всех полей. FieldHeader - заголовок поля
                    Dim FieldsBody,FieldHeader
                    For Each FieldName in Fields
                        &#039;/// Добавляем в заголовке информацию о том, что данное поле относится к данным формы. На хвосте добавляем перенос
                        &#039;/// Примерный вид заголовка &quot;Content-Disposition: form-data; name=&quot;Имя_поля&quot;
                        FieldHeader = &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; &amp; FieldName &amp; &quot;&quot;&quot;&quot; &amp; vbCrLf
                        &#039;/// Собираем тело поля и добавляем в общую переменную. 
                        &#039;/// Результат сборки одного поля выглядит так
                        &#039;/// -----------------------------QoJtOkQvNnHa
                        &#039;/// Content-Disposition: form-data; name=&quot;Field1&quot;
                        &#039;///
                        &#039;/// FieldContent

                        FieldsBody = FieldsBody &amp; DefaultBoundary &amp; Boundary &amp; vbCrlf &amp; FieldHeader &amp; vbCrlf &amp; Fields(FieldName) &amp; vbCrlf
                    Next
                    &#039;//// Конвертируем собранные поля в двоичные данные записываем в поток
                    Stream.Write StringToBinary(FieldsBody,Charset)
                End if
                
                &#039;/// Перебираем файлы
                For Each FieldName in Files
                    &#039;/// Собираем заголовок
                    &#039;/// Пример вида заголовка:
                    &#039;/// ---------------------------QoJtOkQvNnHz
                    &#039;/// Content-Disposition: form-data; name=&quot;File1&quot;; filename=&quot;C:\file.zip&quot;
                    &#039;/// Content-Type: application/octet-stream
                    &#039;///
                    FieldHeader = DefaultBoundary &amp; Boundary &amp; vbCrlf &amp; &quot;Content-Disposition: form-data; name=&quot;&quot;&quot; &amp; FieldName &amp; &quot;&quot;&quot;; filename=&quot;&quot;&quot; &amp; Files(FieldName)(0) &amp; &quot;&quot;&quot;&quot; &amp; vbCrlf &amp; &quot;Content-Type: &quot; &amp; Files(FieldName)(1) &amp; vbCrLf &amp; vbCrlf
                    &#039;/// Записываем заголовок в стрим
                    Stream.Write StringToBinary(FieldHeader,Charset)
                    &#039;/// Записываем тело файла в стрим
                    if Not isNull(Files(FieldName)(2)) Then Stream.Write Files(FieldName)(2)
                Next

                &#039;/// И в конце передаваемых данных добавляем окончательный разделитель.
                &#039;/// ---------------------------QoJtOkQvNnHz--
                Stream.Write StringToBinary(vbCrlf &amp; DefaultBoundary &amp; Boundary &amp; DefaultBoundary,Charset)
                &#039;/// Переводим курсор в объекте на начало данных
                Stream.Position = 0
                &#039;/// Считываем данные в VarBody
                VarBody = Stream.Read
            End Select
        Case Else &#039;/// На случай если форма отправляется GET-ом
            Dim FieldName
            &#039;/// Собираем поля и объединяем их следующим образом &quot;имя_поля=значение_поля&amp;имя_поля=значение_поля&quot;
            For Each FieldName in Fields.Keys
                VarBody = VarBody &amp; EncodeURIcomponent(FieldName) &amp; &quot;=&quot; &amp; EncodeURIcomponent(Fields(FieldName)) &amp; &quot;&amp;&quot;
            Next
            &#039;/// Для файлов и делаем объединение &quot;имя_поля=путь_файла&amp;имя_поля=путь_файла&quot;
            For Each FieldName in Files.Keys
                VarBody = VarBody &amp; EncodeURIcomponent(FieldName) &amp; &quot;=&quot; &amp; EncodeURIcomponent(Files(FieldName)(0)) &amp; &quot;&amp;&quot;
            Next
            &#039;/// Убираем лищний символ &quot;&amp;&quot; на хвосте
            if VarBody &lt;&gt; &quot;&quot; Then VarBody = Left(VarBody,len(VarBody)-1)
        End Select
    End Property    
    
    &#039;/// Конвертор текста в двоичные данные с учётом кодировки
    Private Function StringToBinary(SourceString,Charset)
        &#039;/// Если текст не передан, выходим из процедуры
        if isEmpty(SourceString) Then Exit Function
        &#039;/// Создаём объект для работы с двоичными данными
        Dim Stream
        Set Stream = CreateObject(&quot;ADODB.Stream&quot;)
        With Stream
            &#039;/// Если кодировка указана, то устанавливает её
            if Charset &lt;&gt; &quot;&quot; Then .Charset = Charset
            &#039;/// Настраиваем объект
            &#039;Указываем тип данных которые в него передадим
            .Type = 2        &#039;adTypeText=2; adTypeBinary=1
            &#039;Разрешаем на запись и чтение. Чтобы после передачи данных в объект, получить из него изменённые.
            .Mode = 3        &#039;adModeRead=1; adModeWrite = 2; adModeReadWrite = 3;
            .Open            &#039;Открываем объект
            &#039;/// Передаём текст в объект
            .WriteText SourceString
            &#039;/// Перемещаем курсор в нулевую позицию, чтобы встать на начало данных.
            .Position = 0
            &#039;/// Меняем тип данных на двоичный adTypeBinary=1
            .Type = 1
            &#039;/// Возвращаем данные из функции наружу
            StringToBinary = Stream.Read
        End With
    End Function
    
    &#039;//// Функция очистки полей
    Public Function Clear
        &#039;/// Очищаем коллекцию полей
        Fields.RemoveAll
        &#039;/// Очищаем коллекцию файлов
        Fields.RemoveAll
    End Function
    
End Class</code></pre></div><p>Автор примера - <strong>Xameleon</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 01 Jan 2008 15:51:29 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=7551#p7551</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=4388#p4388</link>
			<description><![CDATA[<p>Вместо использования скриптов WSH можно просто создать html-файл следующего содержания:<br /></p><div class="codebox"><pre><code>&lt;HTML&gt;&lt;BODY onLoad=&#039;document.forms[0].submit();&#039;&gt;
&lt;FORM action=&#039;http://win.mail.ru/cgi-bin/auth&#039; method=&#039;post&#039;&gt;
    &lt;INPUT type=&#039;hidden&#039; name=&#039;Login&#039; value=&#039;MyLogin&#039;&gt;
    &lt;INPUT type=&#039;hidden&#039; name=&#039;Domain&#039; value=&#039;bk.ru&#039;&gt;
    &lt;INPUT type=&#039;hidden&#039; name=&#039;Password&#039; value=&#039;MyPassword&#039;&gt;
&lt;/FORM&gt;&lt;/BODY&gt;&lt;/HTML&gt;</code></pre></div><p>Замените &quot;MyLogin&quot;, &quot;bk.ru&quot; и &quot;MyPassword&quot; на нужные вам значения. Этот файл можно открывать в любом веб-обозревателе, поддерживающем JavaScript.</p><p>P.S. Для входа на mail.ru сразу в папку &quot;Входящие&quot; в форму можно добавить элемент:<br /></p><div class="codebox"><pre><code>&lt;INPUT type=&#039;hidden&#039; name=&#039;page&#039; value=&#039;msglist?folder=0&#039;&gt;</code></pre></div><p>Решение предложил <strong>wisgest</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 01 Sep 2007 15:29:28 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=4388#p4388</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=4387#p4387</link>
			<description><![CDATA[<p>У веб-форм есть метод submit(), с помощью которого нетрудно отправить данные. Например, в приведённом выше скрипте достаточно добавить:<br /></p><div class="codebox"><pre><code>objForm.submit()</code></pre></div><p>Можно вообще не грузить страницу с формой для авторизации, а создать её в скрипте динамически. Приведённый ниже скрипт открывает Web-интерфейс указанного почтового ящика на сервере mail.ru.<br /></p><div class="codebox"><pre><code>&lt;?xml version=&#039;1.0&#039; encoding=&#039;windows-1251&#039; standalone=&#039;yes&#039;?&gt;
&lt;job&gt;
&lt;resource id=&#039;AuthPageHTML&#039;&gt;&lt;![CDATA[
&lt;HTML&gt;&lt;BODY&gt;
&lt;FORM action=&#039;http://win.mail.ru/cgi-bin/auth&#039; method=&#039;post&#039; style=&#039;display:none;&#039;&gt;
    &lt;INPUT name=&#039;Login&#039; value=&#039;MyLogin&#039;&gt;
    &lt;INPUT name=&#039;Domain&#039; value=&#039;bk.ru&#039;&gt;
    &lt;INPUT name=&#039;Password&#039; value=&#039;MyPassword&#039;&gt;
&lt;/FORM&gt;&lt;/BODY&gt;&lt;/HTML&gt;
]]&gt;&lt;/resource&gt;

&lt;object id=&#039;IE&#039; progid=&#039;InternetExplorer.Application&#039;/&gt;

&lt;script language=&quot;JScript&quot;&gt;&lt;![CDATA[
IE.navigate(&quot;about:blank&quot;); while (IE.busy) WScript.Sleep(100);
IE.Document.write(getResource(&quot;AuthPageHTML&quot;)); IE.Document.close();
var Err;
try {
    IE.Document.forms[0].submit();
    IE.visible=true;
} catch (Err) {IE.Quit();}
]]&gt;&lt;/script&gt;
&lt;/job&gt;</code></pre></div><p>Замените &quot;MyLogin&quot;, &quot;bk.ru&quot; и &quot;MyPassword&quot; на нужные вам значения, сохраните текст скрипта в текстовом файле с расширением .wsf и запустите его двойным щелчком.<br />Решение предложил <strong>wisgest</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 01 Sep 2007 15:05:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=4387#p4387</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: заполнение Web-форм]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=702#p702</link>
			<description><![CDATA[<p>Скрипт (пример) запускает IE в скрытом окне, загружает ресурс <a href="http://mail.ru/">http://mail.ru/</a>, заполняет имя пользователя, домен и пароль для входа в личную почту, а затем делает окно IE видимым.<br /></p><div class="codebox"><pre><code>Set objIE = CreateObject(&quot;InternetExplorer.Application&quot;)
objIE.Visible = False
objIE.Navigate &quot;http://mail.ru/&quot;
While objIE.Busy
    WScript.Sleep 200
Wend
Set objForm = objIE.Document.forms(&quot;Auth&quot;)
&#039;Set objForm = objIE.Document.forms(0)
objForm.elements(&quot;Login&quot;).value = &quot;Vasya&quot;
objForm.elements(&quot;Domain&quot;).value = &quot;bk.ru&quot;
objForm.elements(&quot;Password&quot;).value = &quot;111&quot;
objIE.Visible = True</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 26 Sep 2006 14:21:06 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=702#p702</guid>
		</item>
	</channel>
</rss>
