将工作pythonapi脚本转换为VBA

2024-05-02 14:48:19 发布

您现在位置:Python中文网/ 问答频道 /正文

几天来,我一直在搜索interwebs,寻找将API脚本翻译成VBA的解决方案,使其能够直接在Excel文件中运行。我已经成功地复制了python脚本中生成的签名密钥。但是,我仍然遇到无效凭证错误,因为我相信我以正确的方式构造了头和参数。你知道吗

页眉A、页眉B和页眉C是文档中概述的所需页眉的占位符。参数“job\u id”也是必需的。你知道吗

工作python脚本:

signature = generateSignature(sigtag,key)
headers = {"HEADER_A": signature,
           "HEADER_B": timestamp,
           "HEADER_C": employee_id}
apirequest = requests.get(GEOPAL_BASE_URL + apicall,
                          headers=headers,
                          params={"job_id": job_id})
apifeedback = apirequest.json() 

我一直在拼凑解决这个问题的方法,但是我找不到这样一个例子:有人必须同时使用参数和头,就像我在上面的请求库中使用的那样。你知道吗

以下是我目前在VBA方面的进展:

Private Sub cmdgetjobinfo()
    Dim URL As String, timestamp As String, empID As String, key As String, method As String, signature As String, hash As String, params As String
    Dim objHTTP As Object: Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    Dim ws As Worksheet: Set ws = Worksheets("API")        
    URL = "https://app.addressofwebsite.com/"
    uri = "api/jobs/get"
    timestamp = Format(Now(), "ddd, DD MMM YYYY HH:MM:SS") & " +0000"
    empID = "715"
    method = "get"
    key = "abckey"

    hash = ComputeHMACSHA256(key, method & uri & empID & timestamp)
    signature = EncodeBase64(hash)
    params = ("job_id=testid")

    objHTTP.Open "GET", URL & uri, False
    objHTTP.setRequestHeader "Content-Type", "application/json", "Accept", "application/json"
    objHTTP.setRequestHeader "Authorization", "HEADER_A", signature,"HEADER_B", timestamp,"HEADER_C", empID
    objHTTP.send params
    strResult = objHTTP.responseText
    Worksheets("API").Range("A10:A10") = strResult
End Sub

脚本的当前输出:

{"status":false,"tag":"api\/jobs","error_code":0,"error_message":"Invalid Credentials"}

我知道这个问题存在于对象发送'和'objHTTP.setRequestHeader文件'行。我已经在单独的requestheader行中尝试过了,没有“authorization”标签和其他很多随机的东西。有人能指出我在这里的失败之处吗?你知道吗

非常感谢您的时间!你知道吗


Tags: key脚本apiidurlstringasjob