【问题标题】:Proxy authentication required (http error 407) with WinHttpRequest and proxy with integrated Windows authentication and https需要代理身份验证(http 错误 407),使用 WinHttpRequest 和集成 Windows 身份验证和 https 的代理
【发布时间】:2020-09-02 05:27:23
【问题描述】:

我正在尝试使用来自 VBA 的 WinHttpRequest 从我的公司网络访问外部网站。该公司有一个需要集成 Windows 身份验证的代理服务器。

如果我尝试使用纯 http 访问 URL,则以下代码有效,但如果我尝试使用 https 访问 URL,则会得到 http 状态代码 407 - proxy authentication required

我需要做什么才能使代码与 https 一起使用?

Sub a()
    Dim w As New WinHttp.WinHttpRequest

    'set proxy        
    w.SetProxy 2, "myproxy:8080"
    'use integrated windows authentication
    w.SetAutoLogonPolicy AutoLogonPolicy_Always
    w.Option(WinHttpRequestOption_EnableRedirects) = True
    w.Open "GET", "https://..."
    w.Send
    Debug.Print w.Status ' Status = 407
    Debug.Print w.Option(WinHttpRequestOption_URL)
End Sub

【问题讨论】:

    标签: vba https proxy winhttprequest http-status-code-407


    【解决方案1】:

    尝试,请插入(在OpenSend 之间)一行用于设置凭据,另一行用于忽略(所有)SSL 错误。尝试以下方法:

    Sub AccessSiteThroughProxy()
        Dim w As New WinHttp.WinHttpRequest
    
        'set proxy
        w.setProxy 2, "myproxy:8080"
        'use integrated windows authentication
        w.SetAutoLogonPolicy AutoLogonPolicy_Always
        w.Option(WinHttpRequestOption_EnableRedirects) = True
        w.Open "GET", "https://..."
    
        'try inserting a line to set credentials:________________________________________
         w.SetCredentials UserName, Password, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER ' try Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
         'in order to ignore SSL erors, try:
         w.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300
        '_________________________________________________________________________________
    
        w.send
        Debug.Print w.Status ' Status = 407
        Debug.Print w.Option(WinHttpRequestOption_URL)
    End Sub
    

    【讨论】:

    • SetCredentials 将是一个问题,因为它需要以明文形式输入用户名和密码,这是公司安全政策所不允许的。我会尝试忽略 ssl 错误标志。
    • Ups... 然后,尝试用w.SetAutoLogonPolicy 0 替换线路设置凭据。我没有通过代理连接来测试它...我也会尝试w.SetAutoLogonPolicy AutoLogonPolicy_OnlyIfBypassProxy...有一个正确的引用,我认为它应该使用适当的常量值。
    • @Shadow:你有没有时间检查SetAutoLogonPolicy是否改变了代码行为?
    • 不幸的是,ssl 忽略错误和身份验证的更改都没有帮助。但是,我在测试期间确实观察到,对于某些 URL,https 有效,而对于某些 URL,则无效。也许与需要的 ssl / tls 级别有关,将检查。
    • 我会尝试使用w.Option( 并从智能感知提供的选项中进行选择。你也许会找到一些能够解决你问题的东西。祝你好运!在您确认阅读我的建议后,我将删除我的答案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多