我有一个vbscript函数可以从常规URL创建一个tinyurl。
FUNCTION GetShortURL(strUrl)
Dim oXml,strTinyUrl,strReturnVal
strTinyUrl = "http://tinyurl.com/api-create.php?url=" & strUrl
set oXml = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
oXml.Open "GET", strTinyUrl, false
oXml.Send
strReturnVal = oXml.responseText
Set oXml = nothing
GetShortURL = strReturnVal
END FUNCTION
当tinyurl api关闭或无法访问时,我遇到了问题,使我的脚本失败:
MSXML3.DLL 错误'80072efe' 与服务器的连接异常终止
我是否可以添加此功能以防止错误并使用它具有的长网址??
非常感谢,
neojakey
答案 0 :(得分:1)
如果您想在呼叫失败时返回strUrl
,可以使用On Error Resume Next
FUNCTION GetShortURL(strUrl)
on error resume next
Dim oXml,strTinyUrl,strReturnVal
strTinyUrl = "http://tinyurl.com/api-create.php?url=" & strUrl
set oXml = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
oXml.Open "GET", strTinyUrl, false
oXml.Send
strReturnVal = oXml.responseText
Set oXml = nothing
'Check if an error occurred.
if err.number = 0 then
GetShortURL = strReturnVal
else
GetShortURL = strUrl
end if
END FUNCTION
答案 1 :(得分:0)
显然,您需要某种错误处理。一般来说,VBScript的错误处理并不好玩,但是对于你的规范 - 在任何/不关心什么问题的情况下得到正确的东西或默认值 - 你可以使用一个简单的方法:< / p>
将原来的功能减少到
在代码中:
Function GetShortURL2(strUrl)
GetShortURL2 = strUrl
On Error Resume Next
GetShortURL2 = [_getshorturl](GetShortURL2)
End Function
我使用[]来使用非法的&#39;函数名,因为我想强调不应该直接调用_getshorturl()。 _getshorturl()中的任何错误都会导致跳过赋值和下一行/的恢复(离开函数,返回默认值,重置为默认错误处理)。
辅助功能包含关键部分&#39;原来的功能:
Function [_getshorturl](strUrl)
Dim oXml : Set oXml = CreateObject("Msxml2.ServerXMLHTTP.3.0")
oXml.Open "GET", "http://tinyurl.com/api-create.php?url=" & strUrl, False
oXml.Send
[_getshorturl] = oXml.responseText
End Function
无论哪个操作失败,程序流程都将在&#34; End Function&#34;上恢复。 GetShortURL2()。
的一行已添加:评论通常的做法(参见Daniel Cook的建议)
如果你关闭错误处理(&#34; On Error Resume Next&#34;就是这样),你就会陷入困境:所有的错误都被隐藏起来,而不仅仅是你所重视的错误;无论是否有必要的先决条件或准备工作,您的脚本都会在所有Next行中执行操作。
因此,您应该将范围限制为一个有风险的行:
Dim aErr
...
On Error Resume Next
SomeRiskyAction
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error Goto 0
If aErr(0) Then
deal with error
Else
normal flow
End If
或在OERN范围内的每一行之后检查
On Error Resume Next
SomeRiskyAction1
If Err.Number Then
deal with error
Else
SomeRiskyAction2
If Err.Number Then
deal with error
Else
...
End If
End If
这就是我的意思,当我说&#34;没有乐趣&#34;。将风险代码放在函数中将避免这种麻烦。