Python'daki İstekler kitaplığını kullanarak “Kullanıcı aracısı” gönderme


216

"User-agent"Python isteklerini kullanarak bir web sayfası isterken için bir değer göndermek istiyorum . Aşağıdaki kodda olduğu gibi, başlığın bir parçası olarak göndermek için sorun olup olmadığından emin değilim:

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

Hata ayıklama bilgileri, istek sırasında gönderilen üstbilgileri göstermiyor.

Bu bilgilerin başlıkta gönderilmesi kabul edilebilir mi? Değilse, nasıl gönderebilirim?

Yanıtlar:


323

user-agentBaşlığında bir alan olarak belirtilmelidir.

İşte HTTP başlık alanlarının bir listesi ve muhtemelen aşağıdakileri içeren isteğe özel alanlarla ilgilenirsiniz:User-Agent .

V2.13 ve daha yeni istekleri kullanıyorsanız

İstediğinizi yapmanın en basit yolu bir sözlük oluşturmak ve başlıklarınızı doğrudan belirtmektir, şöyle:

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)

V2.12.x ve daha eski istekleri kullanıyorsanız

requestsGizlenmiş varsayılan üstbilgilerin daha eski sürümleri olduğundan, varsayılan üstbilgileri korumak ve bunlara kendinizinkini eklemek için aşağıdakileri yapmak istersiniz.

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
response.request.headersOrijinal istek nesnesi yanıt nesnesinin bir özniteliği olduğundan, birlikte gönderdiğiniz başlıklara da erişebilirsiniz . Ayrıca bkz http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
burada

3
Yalnızca kendi bilgilerinizle artırmak istiyorsanız, varsayılan değer requests.utils.default_user_agent () olarak da kullanılabilir.
nealmcb

3
Bu doğru değil. Üstbilgilerin geri kalanını engeller. Varsayılanların bir kopyasını requests.utils.default_user_agent () 'den almalı ve güncellemeli ve bunları göndermelidir.
Chad Miller

1
easyness için, httpbin.org/headers (indirilebilir öğeler) tarayıcı başlıklarını alabilir ve ardından sorgunuzun görünmesini sağlayabilirsiniz
m3nda

1
En azından içeri , başlıklar tıkanmıyor 2.13.0ve dokümanlar size headerskwarg'ı kullanmanızı söylüyor.
Jmills

62

Bir oturumu kullanmak daha uygundur , bu şekilde her seferinde üstbilgileri ayarlamayı hatırlamanız gerekmez:

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

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

Varsayılan olarak, oturum çerezleri sizin için de yönetir. Bunu devre dışı bırakmak istiyorsanız, bu soruya bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.