sendμ λ€μ΄κ°λ λͺ¨λ μ νμ 맀κ°λ³μλ μΈμ μμλ μ€μ ν μ μμ΅λλ€(μ: verify, stream λ±). μκ° μ΄κ³Όλ₯Ό μ μΈνκ³ .
λ€λ₯Έ λͺ¨λ μΈμμ λ§μ°¬κ°μ§λ‘ μκ° μ΄κ³Όκ° μΈμ μμ λ³ν©λλλ‘ λμμ λ³κ²½ν μ μμ΅λκΉ?
@ctheiss μ΄ λ¬Έμ λ₯Ό μ κΈ°ν΄ μ£Όμ μ κ°μ¬ν©λλ€!
μ΄κ²μ κ°μ₯ μ΅κ·Όμ #1987μ λμμ§λ§ #1130κ³Ό #1563(μ¬ν΄ λ΄λ΄)μλ λμλ κ²μ
λλ€. Kennethλ μΌλ°μ μΌλ‘ μ΄ λ³κ²½μ μννλ λ° κ΄μ¬μ΄ μλ€κ³ λ°νμΌλ©° μ μ‘ μ΄λν°λ₯Ό μ¬μ©νμ¬ μνν κ²μΌλ‘ μμνμ΅λλ€. λ°©λ²μ λν μλ΄λ₯Ό λ°κ³ μΆλ€λ©΄ κΈ°κΊΌμ΄ λμλλ¦¬κ² μ΅λλ€. νμ§λ§ timeout
λ₯Ό Session
μΆκ°νμ§λ μμ κ²μ
λλ€. .
λ λ§μ λμμ λλ¦¬μ§ λͺ»ν΄ μ£μ‘ν©λλ€!
λ§€μ° λΉ λ₯Έ μλ΅μ κ°μ¬λ립λλ€. μΈκΈνμ λ¬Έμ κ° μ νν μ€λ³΅λλ―λ‘ λ¬Έμ λ₯Ό λ μ κ²μν΄μΌ ν©λλ€!
BaseAdapter
(λλ νμ ν΄λμ€ HTTPAdapter
)λ₯Ό ꡬνν λ€μ mount
μ¬μ©νμ¬ νμ ν΄λμ€λ₯Ό μΈμ
κ³Ό μ°κ²°νλ μμ΄λμ΄μ
λκΉ? "κΈ°λ³Έ μκ° μ΄κ³Ό"λ₯Ό ꡬννλ κ²λ§μΌλ‘λ μ΄μνκ² νλ κ² κ°μ΅λλ€(μμ²μ μλ λ€λ₯Έ λͺ¨λ κ²μ΄ λλΌμΈ μ λλ‘ μ½λ€λ μ μ κ°μν λ).
μμ΄λμ΄λ HTTPAdapter
λ₯Ό μλΈν΄λμ€ννλ κ²μ
λλ€. μ€μ λ‘ κ·Έλ κ² νλ€μ§λ μμ§λ§ μ°λ¦¬κ° μ΄ μμ
μ μννλ μ£Όλ μ΄μ λ λΌμ΄λΈλ¬λ¦¬μμ κ°λ
μ ꡬλΆμ μ μ§νκΈ° λλ¬Έμ
λλ€. Session
κ°μ²΄λ μΏ ν€, ν€λ λ± HTTP μ체μ μλ λ°©μμ λν μΈμ
μ λν μ¬νμ μ격νκ² κ΄λ¦¬ν΄μΌ ν©λλ€. μ μ‘ μ΄λν°λ λ€νΈμν¬ μ°κ²° μλ λ°©μμ λν μ¬ν(μμΌ, μκ° μ΄κ³Ό λ±)μ κ΄λ¦¬ν©λλ€.
λͺ νν νμλ©΄, λΉμ μ μΆμ²μ μ¬λλ€μ΄ μ΄κ²μ νλ€λ κ²μ λκΉ?
class MyHTTPAdapter(requests.adapters.HTTPAdapter):
def __init__(self, timeout=None, *args, **kwargs):
self.timeout = timeout
super(MyHTTPAdapter, self).__init__(*args, **kwargs)
def send(self, *args, **kwargs):
kwargs['timeout'] = self.timeout
return super(MyHTTPAdapter, self).send(*args, **kwargs)
s = requests.Session()
s.mount("http://", MyHTTPAdapter(timeout=10))
@staticshock κ·Έκ²μ μ΅μ μ λλ€. μ
νμ§λ§ λ ꡬ체μ μΌλ‘ λ§νμλ©΄ _μΆμ²_μΈκ°μ?
μ¬μ©μ μꡬ μ¬νμ΄ λ€μνκ³ ν΄λΉ μ¬μ©μλ₯Ό μν΄ μ΄λ₯Ό ν΄κ²°ν μ μλ λ€μν λ°©λ²μ΄ μκΈ° λλ¬Έμ νΉμ κΆμ₯ μ¬νμ μμ΅λλ€.
@staticshock @ sigmavirus24
κ·Έ ν΄κ²°μ± μ μ§λμΉκ² 볡μ‘ν΄ λ³΄μ λλ€. λ€μμ λλ₯Ό μν΄ μλνλ κ² κ°μ΅λλ€.
s = requests.Session()
s.get_orig, s.get = s.get, functools.partial(s.get, timeout=3)
# this should now timeout
s.get('https://httpbin.org/delay/6')
# and this should succeed
s.get_orig('https://httpbin.org/delay/6')
@staticshock @ sigmavirus24
κ·Έ ν΄κ²°μ± μ μ§λμΉκ² 볡μ‘ν΄ λ³΄μ λλ€. λ€μμ λλ₯Ό μν΄ μλνλ κ² κ°μ΅λλ€.
s = requests.Session() s.get_orig, s.get = s.get, functools.partial(s.get, timeout=3) # this should now timeout s.get('https://httpbin.org/delay/6') # and this should succeed s.get_orig('https://httpbin.org/delay/6')
post
, put
λ±κ³Ό κ°μ λμ¬λ₯Ό μ¬μ©νλ κ²½μ°μλ μ΄λ₯Ό λ€λ₯Έ λμ¬μ μ μ©ν΄μΌ ν©λλ€. μμ μ±μ μν΄ λ΄κ° μ¬μ©νλ κ²μ λ€μκ³Ό κ°μ΅λλ€.
session = requests.Session()
for method in ('get', 'options', 'head', 'post', 'put', 'patch', 'delete'):
setattr(session, method, functools.partial(getattr(session, method), timeout=5))
# All methods of session should now timeout after 5 seconds
request
λ©μλλ₯Ό shimνμ§ μλ μ΄μ λ 무μμ
λκΉ?
s = requests.Session()
s.request = functools.partial(s.request, timeout=3)
# this should now timeout
s.get('https://httpbin.org/delay/6')
λͺ¨λ μμ€μμ μ μμ μΌλ‘ νμνκ³ μΈμ μ μ¬μ©νμ§ μλ κ²½μ° μ μ¬μ μΌλ‘ λ€μμ μνν μ μμ΅λλ€.
requests.api.request = functools.partial(requests.api.request, timeout=3)
μ¬λ¬ λͺ¨λμμ μ¬μ©ν λ μ΄κ²μ΄ μ΄λ»κ² μλνλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μμ²μ μ¬μ©νλ κ° νμΌμ shimμ΄ νμνλ€κ³ μκ°ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
request
λ©μλλ₯Ό shimνμ§ μλ μ΄μ λ 무μμ λκΉ?