Как проверить, доступен ли RSS-адрес

Я использую классический asp / vbscript для загрузки RSS. В этом случае URL-адрес должен начинаться с https, а не с http, поэтому я получаю сообщение об ошибке: Доступ запрещен. Как я могу проверить доступность и работоспособность целевого URL и использовать его?

Set xmlDOM = CreateObject("MSXML2.DOMDocument.6.0")
xmlDOM.async = False
xmlDOM.setProperty "ServerHTTPRequest", True
xmlDOM.Load("http://iqna.ir/fa/rss/services/36")

Я попытался обернуть его внутри if / then, но, очевидно, приведет к той же ошибке:

if (xmlDOM.Load("http://iqna.ir/fa/rss/services/36")) then
   'Proceess the RSS content
end if

person Ali Sheikhpour    schedule 11.04.2020    source источник
comment
Используйте XHR и проверьте код состояния ответа. Затем используйте XML LoadXML() для успешного Response объекта.   -  person user692942    schedule 11.04.2020
comment
При загрузке любого ресурса через HTTP процесс такой же: запросите его, обработайте ответ и проанализируйте ответ. Это универсально для всех ресурсов HTTP. Как только вы узнаете, что ответ действителен, сохраните ResponseText и используйте LoadXML(), чтобы взять сериализованные данные и проанализировать их в структуру XML. Так работает Интернет.   -  person user692942    schedule 11.04.2020
comment
Как мне запросить ресурс http xml, а не xmlDOM.Load? @Lankymart   -  person Ali Sheikhpour    schedule 11.04.2020
comment
Совершенно уверен, что я объяснил это в своем предыдущем комментарии.   -  person user692942    schedule 11.04.2020


Ответы (1)


xmlDOM.Load напрямую загружает целевой ресурс и не имеет метода проверки действительности целевого URL. Используйте MSXML2.XMLHTTP, чтобы проверить правильность цели:

function testUrl(url)
    Set o = CreateObject("MSXML2.XMLHTTP")
    on error resume next
    o.open "GET", url, False
    o.send
    if o.Status = 200 then testUrl = True
    on error goto 0
    set o=nothing
end function

Set xmlDOM = CreateObject("MSXML2.DOMDocument.6.0")
xmlDOM.async = False
xmlDOM.setProperty "ServerHTTPRequest", True
url="http://iqna.ir/fa/rss/services/36"
if testUrl(url) then
    xmlDOM.Load(url)
end if

Что касается комментария от Lankymart, это способ использовать ответ MSXML2 напрямую, без нового запроса, путем изменения Load на loadXML:

url="http://iqna.ir/fa/rss/services/36"
Set o = CreateObject("MSXML2.XMLHTTP")
on error resume next
o.open "GET", url, False
o.send
if o.Status = 200 then 
    Set xmlDOM = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDOM.loadXML(o.responseText)
end if
on error goto 0
set o=nothing
person Ali Sheikhpour    schedule 11.04.2020
comment
Если вы это сделаете, вы сделаете два запроса вместо одного. Верните ресурс (в данном случае XML) с XHR, затем загрузите его в документ XML, используя LoadXML(). Таким образом, вы делаете один запрос, а не два. - person user692942; 11.04.2020