ServerXMLHTTP使用默认超时在不到2秒的时间内超时

时间:2014-01-16 22:44:40

标签: proxy xmlhttprequest credentials winhttprequest

使用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秒的时间戳。

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

2 个答案:

答案 0 :(得分:0)

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

我浏览了Microsoft page describing the setTimouts() method上的措辞并错误解释了参数的时基。我假设秒数,实际上是几毫秒。

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

我确实在这个过程中学到了一些东西,所以一切都没有丢失,“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

答案 1 :(得分:0)

Msxml2.ServerXMLHTTP.6.0可以通过代理使用。我花了一段时间,但坚持不懈。我根据微软的建议从WinHttp.WinHttpRequest.5.1移到Msxml2.ServerXMLHTTP.6.0

如果varHTTP是Msxml2.ServerXMLHTTP.6.0的对象引用,则可以使用

varHTTP.setproxy 2, ProxyServerName, "BypassList"

希望这会有所帮助,您可以通过Msxml2.ServerXMLHTTP.6.0继续追求。