1

我正在尝试从 Excel VBA RESTfull API。我已经在 C# 中有一个工作版本:

//Request Auth Token
var client = new RestClient("https://api.xxx.com/exp/oauth2/v1/access_token_cors");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

需要将此代码移植到 VBA。我写:

Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "POST", "https://api.xxx.com/exp/oauth2/v1/access_token_cors", False
MyRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
PostData = """application/x-www-form-urlencoded"", ""response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope="""
MyRequest.send (PostData)

当我运行 VBA 版本时,在 .Send 行出现错误“与服务器的连接异常终止”

由于它在 C# 中工作,它不可能是防火墙或服务器问题。我该怎么做才能让它工作?我搜索了类似的问题,但没有一个适用于我的情况。

4

2 回答 2

1

您应该能够执行以下操作:

Set request = CreateObject("WinHttp.WinHttpRequest.5.1")
request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
request.Open "POST", URL, False 'Your missing the actual url
request.Option(4) 'Ignore SSL Errors.
request.Option(12) 'Allow redirect to SSL
request.send("response_type=token&grant_type=client_credentials&client_id=1234&client_secret=1234&scope=")

我认为问题是,您没有定义的 URL。api很可能是SSL,所以你应该考虑到这一点,以及为什么PostData在你可以输入字符串的时候创建一个。你也有很多引号,我假设你这样做是为了正确发送它们,我相信这是关闭的。以上应该对你有用。

于 2018-02-01T18:06:47.933 回答
0

如果您在 Windows 7 或 8 上遇到此问题,则可能与 VBA 使用 SSL 协议发送数据包有关,该数据包被仅接受 TLS 的服务器丢弃。在这种情况下,您将需要应用 2 步补丁/更新来解决此问题,适用于 Windows 7,

步骤 1. 获取 Microsoft 更新: 下载相关(用户的 Windows 版本的 32 位或 64 位) Microsoft 安全协议更新并安装(如果尚未安装)。

步骤 2. 下载 Microsoft Easy Fix:从Microsoft Support Article 下载 Microsoft “Easy Fix” ,然后执行以将 TLS 1.1+ 设置为默认值。

来源:更新以启用 TLS 1.1 和 TLS 1.2 作为 Windows 中 WinHTTP 中的默认安全协议

于 2019-03-22T15:13:18.537 回答