Python Glossary English

все Python 3до 3.14Удалено из стандартной библиотекипонятие

urllib.request.FancyURLopener

удалено

Расширенный URLopener с редиректами и своим User-Agent. Удалён в Python 3.14 — используйте build_opener() и urlopen().

Синтаксис

class MyOpener(urllib.request.FancyURLopener): ...  # до 3.14

FancyURLopener добавлял к URLopener переходы по редиректам и простую авторизацию; чтобы сменить User-Agent, от него наследовались и переопределяли атрибут version. Удалён вместе с URLopener: устаревший интерфейс из Python 2, который не получал исправлений. Как переписать: редиректы urlopen() отрабатывает сам; свой заголовок задаётся через opener = urllib.request.build_opener() и opener.addheaders = [('User-Agent', 'my-bot/1.0')] либо через объект Request(url, headers={...}); авторизацию подключают обработчиком HTTPBasicAuthHandler, переданным в build_opener().

Примеры

# Python 3.14+
import urllib.request
try:
    urllib.request.FancyURLopener
except AttributeError as e:
    print(type(e).__name__)  # → AttributeError
# Python 3.14+
from pathlib import Path
from urllib.request import build_opener
Path('note.txt').write_text('hi')
opener = build_opener()
opener.addheaders = [('User-Agent', 'my-bot/1.0')]
with opener.open(Path('note.txt').resolve().as_uri()) as resp:
    print(resp.read())  # → b'hi'
from pathlib import Path
from urllib.request import FancyURLopener
class Opener(FancyURLopener):
    version = 'my-bot/1.0'
Path('note.txt').write_text('hi')
opener = Opener()
print(opener.open(Path('note.txt').resolve().as_uri()).read())  # → b'hi'

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности