Подтвердить что ты не робот

Различия между XMLHTTP и ServerXMLHTTP

Я пытаюсь написать надстройку Excel, которая может получать данные из веб-службы в Excel.

Чтобы использовать его, пользователю просто нужно ввести имя функции, предоставленное надстройкой. Я нашел две статьи, реализующие HTTP-запросы в VBA: XMLHTTP и ServerXMLHTTP.

У меня есть трудности с их использованием. Я не знаю, какой из них использовать. Каковы различия между XMLHTTP и ServerXMLHTTP?

4b9b3361

Ответ 1

Davuz,

И Тим, и Джей предоставляют отличный контекст и кратким комментариям. Я просто добавлю немного и попытаюсь дать некоторый контекст.

По сути, объект XMLHTTP используется для создания XMLHttpRequest, который используется для реквизиции данных с веб-сайта/веб-сервера/веб-службы. См. Ссылку на wikipedia для получения дополнительной информации: http://en.wikipedia.org/wiki/XMLHttpRequest

В общем, XMLHTTP обычно используется при общении в качестве клиента на сервере - например, когда вы используете приложение для запроса на веб-сервис. объект XMLHTTP также используется для различных клиентских методов передачи, таких как протокол передачи файлов (FTP), кэширование URL и другие полезные инструменты. Короче говоря, объект XMLHTTP используется для запроса на какой-либо сервер и запроса интереса к клиенту, будь то доступ к серверу через FTP-соединение, серию файлов из репозитория или веб-сервис для обработки данных от клиента.

В отличие от этого ServerXMLHTTP предназначен для обмена данными между серверами, приложениями (клиентами) и для обработки запросов от клиентов. Хотя объект ServerXMLHTTP сохраняет состояние активным, что означает, что информация, отправленная/получаемая в/из адресата, сохраняется для будущих транзакций данных в текущем соединении - она ​​также не поддерживает активные функции XMLHTTP, такие как "кэширование URL-адресов, обнаружение прокси-серверов, HTTP/1.1 chunking, автономная поддержка и поддержка протоколов Gopher и FTP" для стека http-клиента, используемого объектом ServerXMLHTTP.

С технической точки зрения объект XMLHTTP использует WinInet (Windows Internet Explorer) для своей функциональности, а объект ServerXMLHTTP использует стек клиента. DLL WinInet является основой управления интернет-протоколом Windows, а dll используется для обработки HTTP, HTTPS, FTP и подобных запросов.

В отличие от этого, когда ServerXMLHTTP Object создает новый клиентский http-стек, который является сущностью отдельной "сессии" HTTP-клиента. Использование отдельного сеанса означает, что несколько экземпляров объекта ServerXMLHTTP могут быть активны в любой момент времени - в зависимости от памяти и доступности соединений сокетов.

Итак, вкратце - в дополнение к информации из комментариев выше, объект XMLHTTP часто используется для запроса информации и использования ее каким-то образом, обычно как клиент. Аналогично полезно, но часто по-разному используется объект ServerXMLHTTP Object, который может использоваться для запроса данных, отправки данных или даже для передачи полученных другим приложениям в другое приложение относительно эффективным образом. Это часто используется для бизнес-приложений, для которых требуются ответы в реальном времени или для предоставления данных клиентам, учитывая серию запросов, возможно, с условиями, встроенными в эти запросы, - и многое, многое другое.

Надеюсь, это проливает некоторый свет на различия между ними. При чтении SO-вопросов/ответов на использование конкретных фрагментов запросов типа XMLHTTP можно найти гораздо больше, а также более глубокое исследование MSDN и других сайтов, содержащих документацию по конкретным материалам в Интернете /XMLHTTPRequest для VB, VBA и Microsoft Office.

Сообщите мне, если это поможет или у вас есть другие вопросы/мысли,

~ JOL

Ответ 2

Меня просто поразило различие: когда веб-сервер (IIS) настроен на разрешение только проверки подлинности Windows, а не анонимного доступа, вызовы ServerXMLHTTP терпят неудачу с ошибкой аутентификации, тогда как вызовы XMLHTTP этого не делают. Кажется, что объект XMLHTTP автоматически обрабатывает отправку учетных данных Windows Authentication, когда это необходимо. Я подозреваю, что добавление NetworkCredentials к объекту ServerXMLHTTP должно быть лучшим решением, но я могу найти только базовую аутентификацию, которая явно передает plaintext uid/pwd (очевидно, неприемлемый).

Ответ 3

В объекте ServerXMLHTTP используется winhttp, где XMLHTTP использует wininet.

Поскольку wininet анализирует такие вопросы, как настройка аутентификации и прокси-сервера, такие проблемы не будут отображаться, как при использовании ServerXMLHTTP. Однако ограниченная гибкость в XMLHTTP может заставить вас взять на себя дополнительные обязанности с использованием ServerXMLHTTP, поскольку необходимо согласовать механизмы аутентификации конечной точки сервера и конечной точки, хотя в этом случае есть методы в winhttp.

При переносе большего количества клиентских XMLHTTP на более настраиваемый надежный объект и классы ServerXMLHTTP вы можете удивиться, почему вы так давно не сделали.

Даже не заставляйте меня начинать с плохой и теперь несуществующей поддержки WPAD.:)

Ответ 4

Что действительно помогло мне в этом.

После определения Object:

Dim objHTTP As Object

Set objHTTP = createObject("MSXML2.ServerXMLHTTP")
...

Затем включите эти две строки:

' --- Disregard any Proxy Settings and go straight to the IP address

    objHTTP.SetProxy 1