все 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Сообщить о неточности