Что вызывает ошибку «Запросить объект слишком большой» при отправке изображения в Telegram? - PullRequest
0 голосов
/ 30 мая 2019

Размер файла: 51,2 КБ Пытаюсь отправить:

>>> send_img_url = 'https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXX/sendPhoto'
>>> img_name = 'C:/Users/Administrator/Downloads/WhatsApp Image 2019-05-30 at 20.54.40.jpeg'
>>> r = requests.post(send_img_url, data={'chat_id': '-351543550', 'photo': open(img_name, 'rb')})
>>> r
<Response [413]>
>>> r.reason
'Request Entity Too Large'
>>> r.content
b''
>>>

Также я пробую другие запросы, такие как:

photo = open(('C:/Users/Administrator/Downloads/WhatsAppImage.jpeg').encode('utf-8'), 'rb')
r = requests.post(send_img_url, data={'chat_id': '-351543550', 'photo': photo})

и

 with io.open('C:/Users/Administrator/Downloads/WhatsAppImage.jpeg', encoding='utf-8', errors='ignore') as f:
    r = requests.post(send_img_url, data={'chat_id': '-351543550', 'photo': f})

Последний вариант дает мне следующую ошибку:

>>> r
<Response [400]>
>>> r.reason
'Bad Request'

1 Ответ

0 голосов
/ 30 мая 2019

Вы, вероятно, делаете это неправильно.

Как Bot API docs говорит:

Отправьте файл, используя multipart / form-data обычным образом, файлы загружаются через браузер.Максимальный размер 10 МБ для фотографий, 50 МБ для других файлов.

В запросах lib , используя аргумент ключевого слова data=, вы отправляете полезную нагрузку, используя тип form-encoded, не multipart/form-data.

Попробуйте сделать так:

import requests


chat_id = '-351543550'
url = 'https://api.telegram.org/botXXXXXXXXXXXXXXX/sendPhoto?chat_id={}'.format(chat_id)
filepath = 'C:\correct\path\to\your\file.jpg'
r = requests.post(url, files={"photo": open(filepath, 'rb')})  # note: files, not data
print(r.status_code)

PS: вы также можете отправить chat_id как form-encoded параметр, используя

url = 'https://api.telegram.org/botXXXXXXXXXXXXXXX/sendPhoto'
...
r = requests.post(url, data={'chat_id': '-351543550'}, files={"photo": open(filepath, 'rb')})
...