填写打字表单时签名令牌出错

2024-10-03 00:16:37 发布

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

我正在学习Python,并尝试使用Python请求填充类型表单,但我得到以下错误响应:

{"code":"VALIDATION_ERROR","description":"The provided body is malformed.","details":[{"code":"INVALID_PAYLOAD","description":"signature mismatch","in":"BODY","field":".signature"}]}

但是,当我将token.text值手动放入data中时,它可以工作。当以编程方式将令牌添加到有效负载时,我无法使其工作,甚至尝试了str(),但它不工作

代码如下:

import requests
import time

epochTime = int(time.time())
token = requests.get("https://mehdikhireddine.typeform.com/app/form/result/token/OcotDC/default")
final = token.text
print(token.text)
data = { "signature": final,
         "form_id": "OcotDC",
         "landed_at": epochTime,""
         "answers": [
        {
            "field": {
                "id": "nDoisfzMsrBP",
                "type": "short_text"
            },
            "type": "text",
            "text": "mehdilemoi"
        },
        {
            "field": {
                "id": "iCW4s6Fc37OL",
                "type": "legal"
            },
            "type": "boolean",
            "boolean": True
        }

    ]
}
r = requests.post("https://mehdikhireddine.typeform.com/app/form/submit/OcotDC", json=data)
print(r.text)

Tags: textimportformtokenidfielddatatime
1条回答
网友
1楼 · 发布于 2024-10-03 00:16:37

如果在从HTTPS响应获取token之前存储epochTime,则会出现此问题,可能是因为服务器随后无法匹配签名和时间,从而导致"signature mismatch"

您可以通过在收到token响应后使用当前时间来解决此问题,即:

token = requests.get("https://mehdikhireddine.typeform.com/app/form/result/token/OcotDC/default")
epochTime = int(time.time())

输出:

{"message":"success"}

请注意,如果在获取响应和获取epochTime之间经过太多时间,这仍然可能会间歇性失败

相关问题 更多 >