Python post request, проблема с публикацией - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь написать бота typeform, но я новичок, поэтому у меня проблемы с request.post

Я пытаюсь заполнить этот typeform: 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)

Я думаю, что что-то не так с «данными», и я не уверен, правильно ли я использую токен. Не могли бы вы помочь мне?

1 Ответ

1 голос
/ 29 октября 2019

Итак, прежде всего, вам нужно получить еще одно поле с токеном. Для этого вы должны передать заголовок 'accept': 'application/json' в вашем первом запросе. В ответ вы получите объект json с параметрами token и landed_at. Вы должны использовать их на следующем шаге.

Тогда данные публикации должны отличаться от того, что вы передаете. См. Вкладку сети в инструментах разработчика браузера, чтобы узнать фактический шаблон. Он имеет такую ​​структуру:

{
    "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"}
...