【问题标题】:ServerXMLHTTP Timeout in less than 2 seconds using default timeouts使用默认超时,ServerXMLHTTP 超时不到 2 秒
【发布时间】:2014-01-16 22:44:39
【问题描述】:

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

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

【问题讨论】:

    标签: proxy xmlhttprequest credentials winhttprequest


    【解决方案1】:

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

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

    在调试此问题的过程中,我使用备用 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

    【讨论】:

      【解决方案2】:

      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 继续前进。

      【讨论】:

        猜你喜欢
        • 2015-12-11
        • 2012-06-04
        • 1970-01-01
        • 2012-02-12
        • 2016-04-26
        • 2018-12-21
        • 2011-04-25
        • 2012-07-17
        • 2010-11-23
        相关资源
        最近更新 更多