2017-01-16 74 views
2

我有一個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???,但沒有建議的解決方案似乎工作。

誰能爲我提供什麼可能是錯的任何見解或我怎麼能解決這個問題?

+0

什麼是'bAsync'的價值?你是否異步打開連接? –

+0

不可以。它被設置爲false。 – WindsorRick

+0

你嘗試使用[WINHTTP工具(https://msdn.microsoft.com/en-us/library/windows/desktop/aa384084(V = vs.85)的.aspx),如'WinHttpTraceCfg'以找到問題可能發生的地方? –

回答

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

指示代理設置應該從 註冊表來獲得。

+0

謝謝!您給出的原因是有道理的,並解釋了爲什麼將代理設置爲1(xhr.setProxy 1)導致應用程序正常工作。 – WindsorRick

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) 

上面引用的微軟文章給出了代理可以設置的常量的三個值。我不明白爲什麼「直接」設置工作,但它確實。

感謝讓德和其他任何看待此事的人。

相關問題