UnicodeError:使用请求时使用“idna”编解码器编码失败。g

2024-10-01 11:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个bot,允许用户向一个图像发送一个URL,然后下载该图像,但是我的日志文件中不断出现UnicodeError: encoding with 'idna' codec failed错误。我自己还不能重现这个错误。你知道吗

以下是完整的错误消息:

Traceback (most recent call last):
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/telegram/utils/promise.py", line 57, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "ezstickerbot.py", line 183, in url_received
    request = requests.get(url, timeout=3)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen
    chunked=chunked,
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn
    conn.connect()
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/connection.py", line 334, in connect
    conn = self._new_conn()
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/connection.py", line 157, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw
  File "/home/fenicbot/virtualenv/ez-sticker-bot/3.7/lib/python3.7/site-packages/urllib3/util/connection.py", line 61, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/opt/alt/python37/lib64/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
UnicodeError: encoding with 'idna' codec failed (UnicodeError: label empty or too long)

以下是错误产生的代码段:

def url_received(update: Update, context: CallbackContext):
    message = update.message
    text = message.text.split(' ')

    if len(text) > 1:
        message.reply_text(get_message(message.chat_id, "too_many_urls"))
        return

    text = text[0]
    url = urlparse(text, 'https').geturl()

    # remove extra backslash after https if it exists
    if url.lower().startswith("https:///"):
        url = url.replace("https:///", "https://", 1)

    # get request
    try:
        request = requests.get(url, timeout=3)
        request.raise_for_status()
    except InvalidURL:
        message.reply_markdown(get_message(message.chat_id, "invalid_url").format(url))
        return
    except HTTPError:
        message.reply_markdown(get_message(message.chat_id, "url_does_not_exist").format(url))
        return
    except Timeout or ConnectTimeout:
        message.reply_markdown(get_message(message.chat_id, "url_timeout").format(url))
        return
    except ConnectionError or RequestException or UnicodeError:
        message.reply_markdown(get_message(message.chat_id, "unable_to_connect").format(url))
        return

我也从同一行得到一个UnicodeError: label empty or too long错误。你知道吗

如果有人知道是什么导致了这个错误,我可以如何修复它的帮助将不胜感激。如果是因为用户发送了乱七八糟的网址,我只需要知道他们是怎么乱七八糟的,我可以抓住错误,并向他们发送一条消息,告诉他们哪里出错了。谢谢。你知道吗


Tags: inpyurlmessagehomevirtualenvlibpackages