С urllib
у нас есть два варианта, насколько я знаю.
build_opener
возвращает объект OpenerDirector
, который имеет атрибут addheaders
.Мы можем изменить user-agent и другие заголовки с этим атрибутом.
opener.addheaders = [('User-Agent', 'My User-Agent')]
url = 'http://httpbin.org/user-agent'
r = opener.open(url, timeout=5)
text = r.read().decode("utf-8")
В качестве альтернативы, мы можем установить объект OpenerDirector в глобальное средство открытия с помощью install_opener
и использовать urlopen
отправить запрос.Теперь можно использовать Request
для установки заголовков.
urllib.request.install_opener(opener)
url = 'http://httpbin.org/user-agent'
headers = {'user-agent': "My User-Agent"}
req = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(req, timeout=5)
text = r.read().decode("utf-8")
Лично я предпочитаю второй метод, потому что он более последовательный.После того, как мы установим средство открытия, все запросы будут иметь одинаковые обработчики, и мы можем продолжать использовать urllib таким же образом.Однако, если вы не хотите использовать эти обработчики для всех запросов, вам следует выбрать первый метод и использовать addheaders
для установки заголовков для конкретного объекта OpenerDirector.
С requests
все проще.
Мы можем использовать атрибут session.heders
, если мы хотим изменить user-agent или другие заголовки для всех запросов,
s = requests.session()
s.headers['user-agent'] = "My User-Agent"
r = s.get(url, timeout=5)
или использовать параметр headers
, если мы хотимустановить заголовки только для конкретного запроса.
headers = {'user-agent': "My User-Agent"}
r = requests.get(url, headers=headers, timeout=5)