【问题标题】:How to check if RSS address is accessible [duplicate]如何检查RSS地址是否可访问[重复]
【发布时间】:2020-04-11 08:36:47
【问题描述】:

我正在使用经典的 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

【问题讨论】:

  • 使用 XHR 并检查响应状态代码。然后在成功的 Response 对象上使用 XML LoadXML()
  • 通过HTTP加载任何资源的过程都是一样的,请求它,处理响应并解析响应。这在所有 HTTP 资源中都是通用的。一旦您知道响应是有效的,存储ResponseText 并使用LoadXML() 获取序列化数据并将其解析为XML 结构。这就是互联网的运作方式。
  • 我应该如何请求http xml资源而不是xmlDOM.Load? @兰基玛特
  • 很确定我在之前的评论中解释过。

标签: vbscript asp-classic rss msxml rss-reader


【解决方案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 的评论,这是通过将 Load 更改为 loadXML 直接使用 MSXML2 响应而无需新请求的方式:

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

【讨论】:

  • 如果你这样做,你会发出两个请求而不是一个。使用 XHR 返回资源(在本例中为 XML),然后使用 LoadXML() 将其加载到 XML 文档中。这样你就提出一个请求而不是两个。
猜你喜欢
  • 2010-12-12
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2014-05-02
相关资源
最近更新 更多