передача большых объемов данных c помощу MSXML2.XMLHTTP
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



передача большых объемов данных c помощу... Expand / Collapse
Автор
Сообщение
03.05.2007 11:27
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 25.12.2007 12:56
Сообщ.: 43, Visits: 178
Есть задача:
VBA - рассылка больших объемов текста. Работа в локальной сети без привязок, к сторонним компонентам, к файрволам и т.д.

Решаю так:
CDO - организация самой рассылки.
MSXML2.XMLHTTP - передача данных.
Данные отправляю по MSXML2.ServerXMLHTTP на ASP, который принимает двнные и организует рассылку по переданным параметрам и данным (с VBA по локалке не работает CDO). Затем страница выдает обратно XML данные-отчет, который принимается и обрабатывается программой.

Проблема - в url нельзя передавать большой объем данных. Пробую вызывать запрос методом "Post" + заголовки Http. Сразу ругается. Может кто-нить уже использует такой метод передачи данных? Поделитесь исходником плз. Как на ASP стороне прочитать/загрузить переданные данные? Или может все гораздо проще решается?

Заранее благодарен.



фанат
Сообщ. #912941
05.05.2007 8:43
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 25.12.2007 12:56
Сообщ.: 43, Visits: 178
Привожу пример решения (2 варианта) вышеприведенной задачи:

VB:

Dim HttpReq As New MSXML2.XMLHTTP
Dim xmldoc As New MSXML2.DOMDocument

Call HttpReq.Open("POST", "http://localhost/***/robotmail.asp", True)
rQuery = MyStr

'1 вариант:
[code]
HttpReq.setRequestHeader "Content-Type", "text/xml; Windows-1251"
HttpReq.setRequestHeader "Content-Length", CStr(Len(rQuery))
HttpReq.Send rQuery

'2 вариант:


HttpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HttpReq.Send "my_value=" & rQuery
[code]

Do While HttpReq.readyState <> 4
    bufer_= DoEvents()
Loop

в файле приема данных .asp читаю передачу так:



'для 1 варианта:
[code]
a = Request.BinaryRead(Request.TotalBytes)
For nIndex = 1 to LenB(a)
   PostData = PostData & Chr(AscB(MidB(a,nIndex,1)))
Next

'для 2 варианта:


PostData=Request.Form("My_value")

If Len(PostData)>0 Then
sch = "http://schemas.microsoft.com/cdo/configuration/"
set objMsg = CreateObject("CDO.Message")
set objConf = CreateObject("CDO.Configuration")
Set objFlds = objConf.Fields
With objFlds
            .Item(sch & "sendusing") = 2
            .Item(sch & "smtpserver") = "smtp.yandex.ru"
            .Item(sch & "smtpserverport") = 25
            .Item(sch & "sendusername") = "aaa"
            .Item(sch & "sendpassword") = "***"
            .Item(sch & "smtpauthenticate") = 1
            .Item(sch & "smtpusessl") = "False"
            .Item(sch & "smtpconnectiontimeout") = 60
  .Update
End With

With objMsg
  Set .Configuration = objConf
  .To = "sss2006@yandex.ru"
  .From = "админ<aaa@yandex.ru>"
  .Subject = "письмецо"
  .TextBody = PostData
  '.HTMLBody = PostData
  .TextBodyPart.Charset = "windows-1251"
  '.Addattachment "c:\"
  .Fields("urn:schemas:mailheader:disposition-notification-to") = "aaa@yandex.ru"
  .Fields("urn:schemas:mailheader:return-receipt-to") = "aaa@yandex.ru"
  .DSNOptions = 14
  .Fields.update
  .Send
  flag=1
End With

Set objFlds=Nothing
Set objMsg=Nothing
Set objConf=Nothing
End If

'.....

[code]

Оба варианта благополучно работают.
Теперь самое главное:
Почему письмо приходит в каракулях????
С этого наверное надо было б начать :)

фанат

Сообщ. #913021
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 4:42