You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2016下VBA WinHttp请求LinkedIn API失败求助

针对Windows Server 2016上VBA WinHttp请求LinkedIn API挂起问题的排查方案

看了你的问题描述,请求连Fiddler都抓不到,说明请求根本没离开本地WinHttp的处理层,完全是Server 2016环境的本地配置或安全策略问题,以下是几个具体的排查方向和解决方案:

1. 强制WinHttp使用TLS 1.2协议

虽然你用howsmyssl测试显示TLS1.2正常,但WinHttp在Server 2016的默认配置可能没明确启用TLS1.2,手动强制指定协议试试:

With New WinHttp.WinHttpRequest 
    ' 强制启用TLS 1.2,&H800对应TLS1.2的标识
    .Option(WinHttpRequestOption_SecureProtocols) = &H800
    .Open "GET", "https://api.linkedin.com/v2/me?projection=(id,localizedFirstName,localizedLastName)", False 
    .setRequestHeader "Authorization", "Bearer " & auth_AccessToken 
    .setRequestHeader "Content-Type", "application/json" 
    .Send 
End With

如果还是不行,可以试试同时启用TLS1.1和TLS1.2:.Option(WinHttpRequestOption_SecureProtocols) = &H200 + &H800

2. 更新Server 2016的根证书库

LinkedIn API的SSL证书可能依赖较新的根证书,而Server 2016默认的根证书库比Win10旧,导致WinHttp不信任该证书,直接拦截了请求:

  • 以管理员身份打开命令提示符,运行certutil -syncWithWU同步更新根证书
  • 用IE浏览器直接访问https://api.linkedin.com/v2/me,如果弹出证书错误提示,手动安装对应的根证书(按照提示完成证书安装)

3. 检查WinHttp的代理配置

WinHttp可能使用了系统代理,但代理规则阻止了api.linkedin.com的访问,或者自动代理配置异常:

  • 运行netsh winhttp show proxy查看当前WinHttp的代理设置
  • 临时重置代理配置:netsh winhttp reset proxy,之后再测试请求
  • 也可以在代码里强制跳过代理,直接连接:
With New WinHttp.WinHttpRequest 
    .Option(WinHttpRequestOption_Proxy) = 2 ' 2代表直接连接,不使用代理
    .Option(WinHttpRequestOption_SecureProtocols) = &H800
    .Open "GET", "https://api.linkedin.com/v2/me?projection=(id,localizedFirstName,localizedLastName)", False 
    .setRequestHeader "Authorization", "Bearer " & auth_AccessToken 
    .setRequestHeader "Content-Type", "application/json" 
    .Send 
End With

4. 排查系统安全软件的拦截

Windows Server 2016的防火墙、Windows Defender或第三方安全软件(如EDR、杀毒软件)可能拦截了Access进程的出站请求:

  • 检查Windows防火墙的出站规则,确认没有阻止msaccess.exe或winhttp.dll的规则
  • 临时关闭Windows Defender的实时保护(测试用,之后记得开启),再运行请求测试
  • 如果有第三方安全软件,暂时禁用后测试是否能正常发送请求

5. 改用异步模式获取更详细的错误信息

同步模式下请求直接挂起超时,改用异步模式可能会返回具体的错误代码,帮助定位问题:

Dim httpReq As WinHttp.WinHttpRequest
Set httpReq = New WinHttp.WinHttpRequest

With httpReq
    ' 开启异步模式(第三个参数为True)
    .Open "GET", "https://api.linkedin.com/v2/me?projection=(id,localizedFirstName,localizedLastName)", True
    .Option(WinHttpRequestOption_SecureProtocols) = &H800
    .setRequestHeader "Authorization", "Bearer " & auth_AccessToken
    .setRequestHeader "Content-Type", "application/json"
    .Send
    
    ' 循环等待请求完成
    Do While .ReadyState <> 4
        DoEvents
    Loop
    
    ' 在立即窗口输出状态和响应(按Ctrl+G查看)
    Debug.Print "状态码:" & .Status
    Debug.Print "响应内容:" & .ResponseText
    Debug.Print "错误信息:" & .StatusText
End With

6. 更新WinHttp组件版本

Windows Server 2016的WinHttp.dll版本可能较旧,存在兼容性问题:

  • 查看C:\Windows\System32\winhttp.dll的版本号,对比Windows 10上的版本
  • 安装Windows Server 2016的最新累积更新,更新系统核心组件

内容的提问来源于stack exchange,提问作者FrugalTPH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:28:13