Requests: κΈ°λŠ₯ μš”μ²­: μ„Έμ…˜μ— μ‹œκ°„ 초과 μΆ”κ°€

에 λ§Œλ“  2014λ…„ 04μ›” 21일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: psf/requests

send에 λ“€μ–΄κ°€λŠ” λͺ¨λ“  선택적 λ§€κ°œλ³€μˆ˜λŠ” μ„Έμ…˜μ—μ„œλ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€(예: verify, stream λ“±). μ‹œκ°„ 초과λ₯Ό μ œμ™Έν•˜κ³ .

λ‹€λ₯Έ λͺ¨λ“  μΈμˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ‹œκ°„ μ΄ˆκ³Όκ°€ μ„Έμ…˜μ—μ„œ λ³‘ν•©λ˜λ„λ‘ λ™μž‘μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

request λ©”μ„œλ“œλ₯Ό shimν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

s = requests.Session()
s.request = functools.partial(s.request, timeout=3)
# this should now timeout
s.get('https://httpbin.org/delay/6')

λͺ¨λ“  11 λŒ“κΈ€

@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이 ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

jakul picture jakul  Β·  3μ½”λ©˜νŠΈ

remram44 picture remram44  Β·  4μ½”λ©˜νŠΈ

NoahCardoza picture NoahCardoza  Β·  4μ½”λ©˜νŠΈ

avinassh picture avinassh  Β·  4μ½”λ©˜νŠΈ

xsren picture xsren  Β·  3μ½”λ©˜νŠΈ