VBS Эмулятор отправки HTML формы через XmlHttp (код в посте)

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

VBS Эмулятор отправки HTML формы через XmlHttp (код в посте)

Сообщение ALX_2002 » 27.11.2007 (Вт) 13:55

Задался созданием эмулятора отправки HTML формы. Вот что получилось. Есть ли более простой вариант отправить данные данные на сервер в таком же формате ?

P.S Упёрся в то, что в VB нет функци Escape Есть ли где нибудь её исходник или что нибудь на замену ей ? Да и вообще на замену всей этой громосткости ? :roll:

Код: Выделить всё


Login

Sub Login
   Dim HttpRequest

   Set HttpRequest = New HttpRequestClass

   Dim UserName,Password

   Title = "Заход на форум http://bbs.vbstreets.ru"

   username = InputBox("Логин",Title)
   password = InputBox("пароль",Title)


   HttpRequest.AddVar "username",username
   HttpRequest.AddVar "password",password

   HttpRequest.AddVar "login","Вход"

   HttpRequest.Send "POST","http://bbs.vbstreets.ru/login.php"

   If HttpRequest.Status = 200 then
      Set HTMLDocument = CreateObject("HTMLFile")
      HTMLDocument.Open
      HTMLDocument.Write "<HTML><BODY></BODY></HTML>"
      HTMLDocument.body.innerhtml = HttpRequest.ResponseText
      HTMLDocument.Close

      For Each SPAN in HTMLDocument.body.all.tags("SPAN")
         If SPAN.classname="gen" Then
            MsgBox "Учётная запись отсутствует или пароль неверен !",vbExclamation,"Ошибка !!!"
            Exit Sub
         End if
      Next
      MsgBox "Вы успешно зашли на сайт.",vbInformation
   Else
      MsgBox HttpRequest.Status & " " & HttpRequest.StatusText,vbExclamation,"Request Error"
   End if
End Sub


'///////////// Класс модуль
Class HttpRequestClass
   Private Dictionary
   Private XmlHttp
   Private Stream
   Private ByteData

   Private adTypeText
   Private adTypeBinary

   Public DefaultCharset
   Public RequestCharset
   Public ResponseCharset

   Public Status
   Public StatusText

   Public ResponseText

   Sub Class_Initialize
      On Error Resume Next
      Set XmlHttp = CreateObject("Microsoft.XmlHttp")
      if Err.Number <> 0 Then
         MsgBox "Не удалось создать компонент Microsoft.XmlHttp",vbCritical
      Exit Sub
      End if

      Set Stream = CreateObject("ADODB.Stream")

      if Err.Number <> 0 Then
         MsgBox "Не удалось создать компонент ADODB.Stream",vbCritical
         Exit Sub
      End if

      adTypeText = 2
      adTypeBinary = 1

      Set Dictionary = CreateObject("Scripting.Dictionary")

      if Err.Number <> 0 Then
         MsgBox "Не удалось создать компонент Scripting.Dictionary",vbCritical
         Exit Sub
      End if

      DefaultCharset = "Windows-1251"
      RequestCharset = DefaultCharset
      ResponseCharset = DefaultCharset
   End Sub

   Function AddVar(VarName,VarValue)
      VarValue = Escape(VarValue)
      Dictionary(VarName) = VarValue
   End Function

   Function Send(METHOD,URL)
      Dim VarBody

      For Each Var in Dictionary
         VarBody = VarBody & Var & "=" & Dictionary(Var) & "&"
      Next

      VarBody = Left(VarBody,Len(VarBody)-1)

      ByteData = TextToBytes(VarBody,RequestCharset)

      METHOD = UCase(METHOD)

      If METHOD <> "POST" Then METHOD = "GET"

      if METHOD = "GET" Then
         URL = URL & "?" & VarBody
         XmlHttp.Open METHOD,URL,False
      Else
         XmlHttp.Open METHOD,URL,False
         XmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
      End if

      XmlHttp.setRequestHeader "Cache-Control", "no-cache"

      XmlHttp.Send ByteData

      Charset = ResponseCharset

      Groups = Split(XmlHttp.GetResponseHeader("Content-type"),";")

      For Each Group in Groups
         Group = Split(Group,"=")
         if Ubound(Group)=1 Then
            Group(0) = Trim(LCase(Group(0)))
            if Group(0)="charset" then Charset = Trim(Group(1))
            Exit For
         End if
      Next

      ResponseText = BytesToText(XmlHttp.ResponseBody,Charset)
      Status = XmlHttp.Status
      StatusText = XmlHttp.StatusText

   End Function

   Private Function TextToBytes(TextData,Charset)
      if IsEmpty(TextData) Then Exit Function
      With Stream
         .Type = adTypeText
         if Charset <> "" Then .Charset = Charset
         .Open
         .WriteText TextData
         .Position = 0
         .Type = adTypeBinary
         TextToBytes = Stream.Read
         .Close
      End With
   End Function

   Private Function BytesToText(ByteData,Charset)
      if IsEmpty(ByteData) Then Exit Function
      With Stream
         .Type = adTypeBinary
         .Open
         .Write ByteData
         .Position = 0
         .Type = adTypeText
         if Charset <> "" Then .Charset = Charset
         BytesToText = Stream.ReadText
         .Close
      End With
   End Function

End Class
Вложения
FormRequest.zip
(1.57 Кб) Скачиваний: 81

DKbelRoma
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 282
Зарегистрирован: 13.09.2007 (Чт) 23:32
Откуда: Из Кривого Рога

Сообщение DKbelRoma » 27.11.2007 (Вт) 16:04

ALX_2002 - браво... Проверил, работает!!! Помоему круто... 8)
«Не важно, откуда ты. Важно - где ты.»


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList  
cron