1

在使用 ServerXMLHTTP 对象发送 HTTPS“GET”请求时,我遇到了一个涉及“超时”的问题。

为了欺骗对象以登录用户的 id 和密码发送请求,我将其设置为使用虚拟代理,然后排除 URL 的域(在 Intranet 上)。所以变量 url_to_get 包含 .mydomain.com,而代理地址实际上是“not.used.com”。

// JScript source code
HTTP_RequestObject = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");

// Using logged in username authentication
HTTP_RequestObject.open("GET", url_to_get, false);
HTTP_RequestObject.setProxy(2, "not.used.com", "*.mydomain.com");

try
{
   HTTP_RequestObject.send();
}
catch (e)
{
}

在 catch 块中,我记录了“(0x80072EE2)操作超时”的异常。这是在打开之前的日志消息之后 1 到 2 秒的时间戳。

重试将按预期工作,并且可以一遍又一遍地进行。这是服务器端的东西吗?还是代理的结果?

4

2 回答 2

0

嗯,这是痛苦和尴尬的。我找出了超时问题的根本原因。我已将超时设置为比实际默认值小 3 个数量级的“默认值”。因此,即使我将它们增加到我认为非常大的值,我仍然比默认值短。

我浏览了Microsoft 页面上描述 setTimouts() 方法的措辞,并误解了参数的时基。我假设是几秒钟,而实际上是几毫秒。

在调试此问题的过程中,我使用备用 COM 对象“WinHttp.WinHttpRequest.5.1”复制了代码,并在验证等效 API SetTimeouts()时发现了错误。

我确实在这个过程中学到了一些东西,所以一切都没有丢失,“WinHttp.WinHttpRequest.5.1”有一个 SetAutoLogonPolicy() [3] 方法,它允许我跳过“Msxml2.ServerXMLHTTP. 6.0" 强制它将用户的凭据发送到 Intranet 服务器。我还摆弄了 Fiddler [4] 并学到了足够的危险!

希望其他人可以从我的错误中吸取教训,并发现这对将来调试他们自己的问题很有用。

这里有一些内联链接,因为我没有足够的代表来发布两个以上:

[3]:msdn.microsoft.com/en-us/library/windows/desktop/aa384050%28v=vs.85%29.aspx

[4] : fiddler2.com

于 2014-01-19T10:06:27.023 回答
0

Msxml2.ServerXMLHTTP.6.0可以通过代理使用。我花了一段时间,但坚持得到了回报。在微软的建议下,我从WinHttp.WinHttpRequest.5.1Msxml2.ServerXMLHTTP.6.0

varHTTP 是您Msxml2.ServerXMLHTTP.6.0可以使用的对象引用

varHTTP.setproxy 2, ProxyServerName, "BypassList"

希望这会有所帮助,并且您可以继续使用Msxml2.ServerXMLHTTP.6.0.

于 2016-01-28T15:06:01.583 回答