401 Несанкционированные ошибки при попытке загрузить страницу ASP в файл - PullRequest
0 голосов
/ 15 февраля 2011

Issue

Msxml2.ServerXMLHTTP продолжает возвращать 401 - Несанкционированные ошибки каждый раз, когда мы пытаемся прочитать содержимое файла (ASP) с веб-сервера.

Исходный сервер работает под управлением IIS6 с использованием интегрированного входа NTLM.

Этот процесс ранее успешно использовался, но только для извлечения файлов XML с внешних веб-сайтов, а не с внутренних.

Настройки прокси в реестре сервера, на котором запущен скрипт, также были обновлены для обхода данного веб-сайта, но безрезультатно.

Все пути, указанные в VBScript, были проверены и протестированы, и они являются правильными.

Пользователь, выполняющий сценарий, имеет правильные разрешения на чтение / запись для всех расположений, указанных в сценарии.

Требуется решение

Чтобы определить причину неавторизованных сообщений HTTP 401, чтобы скрипт работал должным образом.

Описание

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

Мы находимся в процессе совершенствования списка и управления формами (теми неприятными бумажками, которые нужно заполнять для конкретных задач). Это включает создание базы данных всех наших форм.

Однако, поскольку организация недостаточно умна, чтобы вкладывать средства в экземпляры MSSQL Server на каждом сайте, репликация базы данных и доступ к ней с локального сервера SQL невозможны.

Чтобы обойти это, я построил серию представлений (ASP-страниц), которые отображают необходимые данные. Затем я намереваюсь использовать Msxml2.ServerXMLHTTP от VBScript, чтобы я мог прочитать полученные страницы и сохранить выходные данные в статический файл на сервере.

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

Код

' Forms - Static Page Generator
' Implimented 2011-02-15 by Michael Harris

' Purpose: To download the contents of a page, and save that page to a static file.

' Target category: 1 (Contracts)
' Target Page:
' http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp
' Target path: \\servername\sharename\corporate\forms\index.asp
' Resulting URL: http://sharename.fpc.wa.gov.au/corporate/forms/index.asp

' Remove read only

' Remove read only flag on file if present to allow editing
' If file has been set to read only by automated process, turn off read only


Const READ_ONLY = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("\\server\sharename\corporate\forms\index.asp")

If objFile.Attributes AND READ_ONLY Then
    objFile.Attributes = objFile.Attributes XOR READ_ONLY
End If

Dim webObj, strURL
Set webObj = CreateObject("Msxml2.ServerXMLHTTP")
strURL = "http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp"

webObj.Open "GET", strURL
webObj.send

If webObj.Status=200 Then
Set objFso = CreateObject("Scripting.FileSystemObject")
Set txtFile = objFso.OpenTextFile("file:\\servername.fpc.wa.gov.au\sharename\corporate\forms\index.asp", 2, True)
txtFile.WriteLine webObj.responseText
txtFile.close

ElseIf webObj.Status >= 400 And webObj.Status <= 599 Then
  MsgBox "Error Occurred : " & webObj.Status & " - " & webObj.statusText
Else
  MsgBox webObj.ResponseText
End If

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Замените свою строку:

webObj.Open "GET", strURL 

На:

webObj.Open "GET", strURL, False, "username", "password"

В большинстве случаев 401 неавторизовано означает, что вы не предоставили учетные данные.Также вы должны указать False, чтобы указать, что вы не хотите асинхронный режим.

0 голосов
/ 21 ноября 2014

Похоже, что О.П. работал с правильными настройками прокси в реестре (http://support.microsoft.com/kb/291008 объясняет, почему конфигурация прокси это исправит). Более новые версии ServerXMLHTTP имеют метод setProxy, который можно использовать для установки необходимой конфигурации прокси в вашем коде.

В приведенном выше коде O.P. после создания webObj следующая строка кода правильно настроит прокси:

webObj.setProxy 2, "0.0.0.0:80", "*.fpc.wa.gov.au" 

ServerXMLHTTP передаст учетные данные пользователя, выполняющего код, если он настроен с прокси-сервером и целевой URL-адрес обходит этот прокси-сервер. Так как вы все равно обходите прокси, вы можете сделать его фиктивным значением "0.0.0.0:80", и убедитесь, что ваш целевой URL покрыт тем, что вы указали в списке обхода "*.fpc.wa.gov.au"

0 голосов
/ 15 февраля 2011

Я бы сначала проверил, можете ли вы получить свой URL через обычный браузер на том же сервере X, на котором вы запускаете свой код (A).Я хотел бы попытаться получить URL с другого компьютера.Никто никогда не достигал этого URL, но в той же сети, что и сервер X (B).

Если B работает, но A нет, я бы заподозрил, что по какой-то причине ваш исходный сервер (т.е. тот, который обслуживаетurl) блокирует сервер X по какой-то причине.Проверьте настройки безопасности II6 и NTLM.

Если и A, и B не работают, то с вашим исходным сервером в общем-то что-то не так (т.е. он блокирует все, или NTML не позволяет вам).

Если A работает (B не имеет значения), проблема должна быть где-то в вашем коде.В этом случае я бы порекомендовал fiddler .Этот инструмент может предоставить вам HTTP-запросы вашего браузера и вашего кода в режиме реального времени.Затем вы можете сравнить оба.Это должно дать вам по крайней мере очень сильный намек на (если не сразу дать вам) решение.

...