@daniil-orlovv
Junior Python-developer

В каком формате передается кириллица json в requests.post(json=data_for_request)?

Пытаюсь отправить POST-запрос на создании записи на услугу. Однако, возвращается ошибка, хотя такой же запрос отрабатывает в POSTMAN.

async def create_session_api(data):

    time = data['time']
    month, day = data['date'].split('-')
    current_year = datetime.datetime.now().year
    date_iso8601 = f'{current_year}-{int(month):02}-{int(day):02}T{time}:00+0300'

    url = 'https://api.yclients.com/api/v1/book_record/{company_id}/'
    print(f'Имя: {data["name"]}'
          f'Коммент: {data["comment"]}')
    data_for_request = {
        "phone": data['phone'],
        "fullname": data['name'],
        "email": data['email'],
        # "code": "38829",
        "comment": data['comment'],
        "type": "mobile",
        "notify_by_sms": 2,
        "notify_by_email": 24,
        # "api_id": "777",  # Необязательный параметр
        "appointments": [
            {
                "id": 1,
                "services": [
                    int(data['service'])
                ],
                "staff_id": int(data['staff']),
                "datetime": date_iso8601,
            }
        ]
        }

    json_data = json.dumps(data_for_request, ensure_ascii=False, indent=4)
    response = requests.post(url, headers=headers, json=data_for_request)

    print(f'Формат json: {json_data}')
    print(f'Данные для создания записи через api: {data_for_request}')
    print(f'Ответ API: {response.text}')


{
  "phone": "77777777777",
  "fullname": "Имя",
  "email": "mail@mail.ru",
  "comment": "комент",
  "type": "mobile",
  "notify_by_sms": 2,
  "notify_by_email": 24,
  "appointments": [
    {
      "id": 1,
      "services": [
        14980882
      ],
      "staff_id": 3113480,
      "datetime": "2024-03-08T15:00:00+0300"
    }
  ]
}

Данные для создания записи через api: {'phone': '77777777777', 'fullname': 'Имя', 'email': 'mail@mail.ru', 'comment': 'комент', 'type': 'mobile', 'notify_by_sms': 2, 'notify_by_email
': 24, 'appointments': [{'id': 1, 'services': [14980882], 'staff_id': 3113480, 'datetime': '2024-03-08T18:00:00+0300'}]}
Ответ API: {"success":false,"data":null,"meta":{"message":"Произошла ошибка"}}


Один и тот же запрос отрабатывает по разному, в зависимости от того, откуда уходит.

Предполагаю, что дело в кириллице:

Формат json: {
    "phone": "77777777777",
    "fullname": "Имя",
    "email": "mail@mail.ru",
    "comment": "комент",
    "type": "mobile",
    "notify_by_sms": 2,
    "notify_by_email": 24,
    "appointments": [
        {
            "id": 1,
            "services": [
                14980882
            ],
            "staff_id": 3113480,
            "datetime": "2024-03-08T18:00:00+0300"
        }
    ]
}


Теперь, я не совсем понимаю, в каком формате точно уходит json из python...

Не понимаю, почему один и тот же json дает разный ответ
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@daniil-orlovv Автор вопроса
Junior Python-developer
Ошибка была в url, как подсказали в комментариях:

Вместо этого:
url = 'https://api.yclients.com/api/v1/book_record/{company_id}/'


Нужно это, либо использовать f-string:
url = 'https://api.yclients.com/api/v1/book_record/1004927/'
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы