vba代码
Sub read_from_api()
Dim url As String, parametrs As String
url = "https://api.company-information.service.gov.uk/company/"
parametrs = "?q={00519500}"
'send request
Dim request As New WinHttpRequest
request.Open "Get", url & parametrs
'auth=(api_key,''))
request.SetRequestHeader "api_key", "10d54202-df9c-4e72-8753-f11bh5c7c427"
request.Send
If request.Status <> 200 Then
MsgBox request.ResponseText
Exit Sub
End If
Dim response As Object
Set response = JsonConverter.ParseJson(request.ResponseText)
End Sub
请帮忙
最佳答案
看着那个API specification ,请求的规范显示:
GET https://api.company-information.service.gov.uk/company/{companyNumber}
{companyNumber}
部分意味着用您要检查的公司编号替换整个事情。 {}
字符只是在那里表明您需要用真实数据和那些{}
替换这个占位符不应该出现在真实的请求中。我们还可以看到 companyNumber 是路径的一部分,而不是查询组件的一部分,因此我们将像这样编写对您的示例公司编号的请求(保持您使用的相同变量名称):
url ="https://api.company-information.service.gov.uk/company/00519500"
parametrs = ""
如果您查看 authentication implementation对于此服务,您将看到 API key 应通过基本身份验证发送。因此,与其拥有“api_key” header (根本与本规范无关),不如使用“Authentication” header 。但是,它并不像在该 header 中包含您的 API key 那么简单。根据关于身份验证的页面,我们需要指定我们正在使用基本身份验证,使用 API key 作为用户名,并且不需要指定密码。该页面提到RFC2617如果你去那里,你会看到你需要在用户名和密码之间放一个冒号,然后 base64 对整个字符串进行编码。即使我们不需要密码,我们仍然必须包含冒号字符。
VBA 没有内置的 base64 编码功能,但来自 this StackOverflow answer 的功能。可能是最容易使用的。只需添加对“Microsoft XML, v3.0”的引用,然后将该答案中的代码添加到您的项目中(或者如果您不想添加新的引用,请参阅 this answer)。
使用该代码,我们可以创建“身份验证” header ,如下所示:
request.SetRequestHeader "Authentication", "Basic " & EncodeBase64("10d54202" & ":")
(请注意,我只包含了您的 API key 的一部分,但您显然应该使用完整的东西)这些更改有望使您的代码正常工作。
其他要点:
关于excel - 试图获取基本公司信息 - API 给出 {“error” :”Empty Authorization header”, ”type”:”ch:service”},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72675804/