@KitCat12

Почему не отправляется архив через urllib.request?

Пытаюсь отправить архив в Телеграм через urllib, получаю ошибку о закрытии соединения без ответа.
RemoteDisconnected('Remote end closed connection without response')


Что я делаю не так?

from os import stat
from urllib import request, parse

token = ""
user_id = 0

with open("files.zip", "rb") as f:

    headers = {'Content-Type': 'application/zip',  'Content-Length': stat("files.zip").st_size}

    r = request.Request(
        url=f"https://api.telegram.org/bot{token}/sendDocument?chat_id={user_id}",
        data=parse.urlencode({"document": f}).encode("utf-8"),
        headers=headers
    )
    request.urlopen(r)

file.close()
  • Вопрос задан
  • 131 просмотр
Решения вопроса 2
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Я уже лет 30 не пользовался urllib (да и офф. документация рекомендует использовать requests), поэтому вам советую тоже использовать requests:
import requests

user_id = 121495485
token = ''

files = {'document': open('files.zip', 'rb')}
response = requests.post(f'https://api.telegram.org/bot{token}/sendDocument?chat_id={user_id}',files=files)

print(response.text)
Ответ написан
@KitCat12 Автор вопроса
from urllib3 import poolmanager

token = ""
user_id = 0

with open("files.zip", "rb") as f:
    http = poolmanager.PoolManager()

    http.request(
        "POST",
        f"https://api.telegram.org/bot{token}/sendDocument",
        fields={
            "chat_id": user_id,
            "document": ("files.zip", f.read(), "document/zip"),
    })

file.close()


Через urllib3
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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