应用程序需要提琴手在某些PC上正确执行

时间:2017-01-16 20:04:08

标签: vb6 fiddler winhttp

我有一个仅在某些条件下运行的VB6应用程序。当它失败时(在下面的发送语句中),它会生成一个

运行时错误'-2147012867(80072efd)':无法建立与服务器的连接

有趣的是,它总是在Fiddler运行时运行。在某些机器上它运行,无论Fiddler是否正在运行,但在其他机器上它只会在Fiddler运行时运行。 Fiddler甚至不必捕获流量来运行它。

请求是https网站。

代码如下所示:

Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.open "POST", sUrl, bAsync
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xhr.setRequestHeader "Content-Length", Len(sBody)
xhr.send sBody

我已阅读Telerik的文章Help! Running Fiddler Fixes My App???,但似乎没有任何建议的解决方案可行。

任何人都可以向我提供有关可能出现的问题或如何解决这个问题的任何见解吗?

2 个答案:

答案 0 :(得分:1)

将代理设置为HTTPREQUEST_PROXYSETTING_DIRECT解决了问题。

' Important Note: The setProxy setting of 1 corresponds to HTTPREQUEST_PROXYSETTING_DIRECT
' (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059(v=vs.85).aspx)
' Without this, the app would only work on the dev machine when Telerik Fiddler was also
' running. Oddly, the app would run correctly on all other machines.

Set xhr = getRequestObject()
xhr.setProxy 1
xhr.open "POST", sUrl, bAsync
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xhr.setRequestHeader "Content-Length", Len(sBody)

上面引用的Microsoft文章给出了可以设置代理的常量的三个值。我不明白为什么"直接"设置工作,但确实有效。

感谢Jeandey和其他任何看过这个的人。

答案 1 :(得分:1)

您可以查看WinHttpSettings注册表项设置吗?

  

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \互联网   设置\连接\ WinHttpSettings

默认值(无代理)是 enter image description here

我认为Fiddler修改了此配置以充当代理。

如果Fiddler未运行=>没有代理人=>连接错误。

WinHttpRequest中,如果未明确调用setProxy => HTTPREQUEST_PROXYSETTING_DEFAULT => HTTPREQUEST_PROXYSETTING_PRECONFIG

  

HTTPREQUEST_PROXYSETTING_PRECONFIG

     

表示应从中获取代理设置   注册表中。