Enviando "User-agent" usando a biblioteca Requests em Python


216

Desejo enviar um valor "User-agent"ao solicitar uma página da Web usando solicitações de Python. Não sei se é bom enviar isso como parte do cabeçalho, como no código abaixo:

debug = {'verbose': sys.stderr}
user_agent = {'User-agent': 'Mozilla/5.0'}
response  = requests.get(url, headers = user_agent, config=debug)

As informações de depuração não estão mostrando os cabeçalhos sendo enviados durante a solicitação.

É aceitável enviar essas informações no cabeçalho? Caso contrário, como posso enviá-lo?

Respostas:


322

A user-agentdeve ser especificado como um campo no cabeçalho.

Aqui está uma lista de campos de cabeçalho HTTP e você provavelmente estaria interessado em campos específicos de solicitação , que incluem User-Agent.

Se você estiver usando solicitações v2.13 e mais recentes

A maneira mais simples de fazer o que você quer é criar um dicionário e especificar seus cabeçalhos diretamente, assim:

import requests

url = 'SOME URL'

headers = {
    'User-Agent': 'My User Agent 1.0',
    'From': 'youremail@domain.com'  # This is another valid field
}

response = requests.get(url, headers=headers)

Se você estiver usando solicitações v2.12.xe mais antigas

Versões mais antigas de requestscabeçalhos padrão com excesso de peso, faça o seguinte para preservar os cabeçalhos padrão e adicione seus próprios a eles.

import requests

url = 'SOME URL'

# Get a copy of the default headers that requests would use
headers = requests.utils.default_headers()

# Update the headers with your custom ones
# You don't have to worry about case-sensitivity with
# the dictionary keys, because default_headers uses a custom
# CaseInsensitiveDict implementation within requests' source code.
headers.update(
    {
        'User-Agent': 'My User Agent 1.0',
    }
)

response = requests.get(url, headers=headers)

6
Você também pode acessar os cabeçalhos enviados response.request.headers, isso funciona porque o objeto de solicitação original é um atributo do objeto de resposta. Veja também http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
aqui

3
O valor padrão também está disponível como orders.utils.default_user_agent () se você quiser apenas aumentá-lo com suas próprias informações.
Nealmcb 30/10

3
Não é correto. Ele derruba o resto dos cabeçalhos. Ele deve obter uma cópia dos padrões de orders.utils.default_user_agent (), atualizá-los e enviá-los.
Chad Miller #

1
para easyness, em httpbin.org/headers (coisas para download), você pode obter os cabeçalhos do navegador, em seguida, fazer a sua consulta aparecem você
m3nda

1
Pelo menos 2.13.0, os cabeçalhos não são derrotados e os documentos apenas dizem para você usar o headerskwarg.
Jmills

62

É mais conveniente usar uma sessão , assim você não precisa se lembrar de definir cabeçalhos sempre:

session = requests.Session()
session.headers.update({'User-Agent': 'Custom user agent'})

session.get('https://httpbin.org/headers')

Por padrão, a sessão também gerencia cookies para você. Caso você queira desativar isso, consulte esta pergunta .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.