#python #api #python-requests #postman #put
Вопрос:
Когда я отправляю запрос PUT через почтальона, все в порядке, но когда я копирую код с почтальона на python, я получаю следующее:
{"code": 50035, "errors": {"_errors": [{"code": "CONTENT_TYPE_INVALID", "message": "Expected "Content-Type" header to be one of {'application/json'}."}]}, "message": "Invalid Form Body"}
код:
url = "https://discord.com/api/v9/guilds/860859559908474900/premium/subscriptions"
payload={'user_premium_guild_subscription_slot_ids': '853228009795223572'}
files=[
]
headers = {
'authorization': 'here token',
'Cookie': '__dcfduid=c5cbabf10a8344558c8c4b90a6e306e2'
}
response = requests.request("PUT", url, headers=headers, data=payload, files=files)
print(response.text)
если я добавлю «тип содержимого»: «приложение/json» в заголовки, я получу это:
{"message": "400: Bad Request", "code": 0}
Комментарии:
1. Вы должны указать правильный тип содержимого, а затем определить, что вызывает следующую ошибку (400).
2. Приложение типа содержимого-Json.
Ответ №1:
Либо используйте json=
вместо data=
, либо добавьте Content-Type
заголовок со значением application/json
, как вам скажет сервер.
Также проверьте Authorization
заголовок, в основном там есть префикс, в котором упоминается, какую аутентификацию использовать, например:
Authorization: Basic base64-encoded(user:pass)
Authorization: Bearer token
Authorization: Token token
и убедитесь files
, что API действительно разрешил параметру быть пустым, а если нет, попробуйте удалить его.
Затем __dcfduid
вы предоставляете файл cookie. Некоторые файлы cookie, как правило, динамичны, поскольку их значение меняется между запросами. Затем попробуйте установить сеанс и выполните в нем часть входа в систему:
import requests as r
ses = r.Session()
resp = ses.post(<login to the API>)
print(resp.text)
ses.put(
url="https://discord.com/api/v9/guilds/860859559908474900/premium/subscriptions",
headers={
'Authorization': 'here token',
# cookies are in the ses object
},
json={
'user_premium_guild_subscription_slot_ids': '853228009795223572'
},
# if required
files=[...]
)
Комментарии:
1. если я использовать JSON= вместо Data= я получаю эту ошибку: pastebin.com/raw/gnb6zHH0 (его на долго, чтобы вставить его здесь), и если я добавлю ‘тип содержимого’ : ‘приложение/JSON’ в заголовках, я получаю это:
{"message": "400: Bad Request", "code": 0}
а если я использовать JSON= и добавить ‘тип содержимого’ : ‘приложения/JSON’ как и я получу эту ошибку pastebin.com/raw/gnb6zHH02. @1bura Итак, вы продвинулись на один шаг ближе — длинное сообщение становится все ближе к успешному ответу. Судя по тому, что там написано (
SET_TYPE_ALREADY_CONTAINS_VALUE
), какие бы данные вы ни передавали, они, по-видимому, уже настроены. Попробуйте удалить их вручную, затем вызовите API.3. он пишет SET_TYPE_ALREADY_CONTAINS_VALUE, но это не так, проверьте это видео youtube.com/watch? v=WpyyJH1mc9M (да, я знаю, что там есть токен авторизации, он мне просто не нужен, это мой тестовый токен, и вы можете его взять)