我正在尝试编写一个排版机器人,但是我完全是一个初学者,所以我在request.post方面遇到问题
我正在尝试填写以下格式:https://typeformtutorial.typeform.com/to/aA7Vx9 通过此代码
import requests
token = requests.get("https://typeformtutorial.typeform.com/app/form/result/token/aA7Vx9/default")
data = {"42758279": "true",
"42758410": "text",
"token": token}
r = requests.post("https://typeformtutorial.typeform.com/app/form/submit/aA7Vx9", data)
print(r)
我认为“数据”出了点问题,我不确定是否以良好的方式使用令牌。你能帮我吗?
答案 0 :(得分:1)
因此,首先,您需要使用令牌获得另一个字段。为此,您应该在第一个请求中传递标头'accept': 'application/json'
。在响应中,您将获得带有token
和landed_at
参数的json对象。您应该在下一步中使用它们。
然后,发布数据应与您传递的内容不同。请参阅浏览器开发人员工具中的“网络”标签,以找到实际的模板。它具有这样的结构:
{
"signature": <YOUR_SIGNATURE>,
"form_id": "aA7Vx9",
"landed_at": <YOUR_LANDED_AT_TIME>,
"answers": [
{
"field": {
"id": "42758279",
"type": "yes_no"
},
"type": "boolean",
"boolean": True
},
{
"field": {
"id": "42758410",
"type": "short_text"
},
"type": "text",
"text": "1"
}
]
}
最后,您应该将该json转换为文本,以便服务器成功解析它。
工作示例:
import requests
import json
token = json.loads(requests.post(
"https://typeformtutorial.typeform.com/app/form/result/token/aA7Vx9/default",
headers={'accept': 'application/json'}
).text)
signature = token['token']
landed_at = int(token['landed_at'])
data = {
"signature": signature,
"form_id": "aA7Vx9",
"landed_at": landed_at,
"answers": [
{
"field": {
"id": "42758279",
"type": "yes_no"
},
"type": "boolean",
"boolean": True
},
{
"field": {
"id": "42758410",
"type": "short_text"
},
"type": "text",
"text": "1"
}
]
}
json_data = json.dumps(data)
r = requests.post("https://typeformtutorial.typeform.com/app/form/submit/aA7Vx9", data=json_data)
print(r.text)
输出:
{"message":"success"}