sadece request.Session
alt sınıf ve aşılmasına neden onun __init__
veBöyleyöntem:
# my_requests.py
import requests
class SessionWithUrlBase(requests.Session):
# In Python 3 you could place `url_base` after `*args`, but not in Python 2.
def __init__(self, url_base=None, *args, **kwargs):
super(SessionWithUrlBase, self).__init__(*args, **kwargs)
self.url_base = url_base
def request(self, method, url, **kwargs):
# Next line of code is here for example purposes only.
# You really shouldn't just use string concatenation here,
# take a look at urllib.parse.urljoin instead.
modified_url = self.url_base + url
return super(SessionWithUrlBase, self).request(method, modified_url, **kwargs)
Ve sonra kodunuzda requests.Session
yerine alt sınıfı kullanabilirsiniz:
from my_requests import SessionWithUrlBase
session = SessionWithUrlBase(url_base='https://stackoverflow.com/')
session.get('documentation') # https://stackoverflow.com/documentation
Ayrıca mevcut kod tabanına değiştirerek önlemek için maymun-yama requests.Session
(bu uygulama olmalıdır olabilir % 100) uyumlu, ancak herhangi bir kod çağırmadan önce fiili yama yapmak emin olun requests.Session()
:
# monkey_patch.py
import requests
class SessionWithUrlBase(requests.Session):
...
requests.Session = SessionWithUrlBase
Sonra:
# main.py
import requests
import monkey_patch
session = requests.Session()
repr(session) # <monkey_patch.SessionWithUrlBase object at ...>
ben bu cevabı gibi ama baz url urljoin' almak için url ve sonrası yöntemlerinde olarak verilmiştir şeyi onlara üzerine yazar 'çünkü böyle hiçbir alt düzlemlere sahip olduğunda işe yarıyor. Benim durumumda buna ihtiyacım vardı, bu yüzden 'urljoin' çağrısını basit dize birleştirme ile değiştirdim –