我正在使用請求會話,并且我希望某些域不形成會話池。有什么辦法可以做到。也是按照正確的方法去做嗎?
blacklist = ["google.com"]
blacklisted = False
def somefunction(imageurl):
for domain in blacklist:
if image_url.find(domain)!=-1:
response = requests.get(image_url)
blacklisted = True
break
if blacklisted == False:
response = session.get(image_url)
uj5u.com熱心網友回復:
由于您正在使用會話,因此您可以為所有列入黑名單的 url 定義一個配接器,如下所示:
from requests.adapters import BaseAdapter
from requests.sessions import Session
blacklist = [
'https://google.com',
'http://gitlab.com',
] # note, the url scheme is needed
class BlacklistedDomainError(Exception):
def __init__(message=None):
if message is None:
message = 'Blacklisted domain'
super(BlacklistedDomainError, self).__init__(message)
class BlacklistAdapter(BaseAdapter):
def send(
self,
request,
stream=False,
timeout=None,
verify=True,
cert=None,
proxies=None
):
raise BlacklistedDomainError()
session = Session()
for prefix in blacklist:
session.mount(prefix, BlakclistAdapter)
def somefunction(imageurl):
try:
response = session.get(imageurl)
except BlacklistedDomainError:
return None
return response
我包含了一個自定義例外,因為它是最佳實踐,但您可以引發任何例外。
我domain在這里使用時要小心,因為它是您使用的術語,但您實際上是在為前綴安裝配接器(會話基本上檢查它嘗試訪問的 url 是否以字串開頭,請參見此處),這就是 url 方案的原因很重要。
有關配接器的更多資訊,請參閱請求檔案。
uj5u.com熱心網友回復:
blacklist = ["google.com"]
blacklisted = False
def somefunction(image_url): #make sure that argument is the same as in next line
if image_url in blacklist:#check if the url in blacklist without for loop
response = requests.get(image_url)
blacklisted = True
break
if blacklisted == False:
response = session.get(image_url)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/398117.html
