Requests: рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз: рд╕рддреНрд░ рдореЗрдВ рд╕рдордпрдмрд╛рд╣реНрдп рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдкреНрд░реИрд▓ 2014  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднреЗрдЬрдиреЗ рдореЗрдВ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рддреНрд░ рдкрд░ рднреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕реНрдЯреНрд░реАрдо рдХрд░реЗрдВ, рдЖрджрд┐)ред рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред

рдХреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЕрдиреНрдп рд╕рднреА рддрд░реНрдХреЛрдВ рдХреА рддрд░рд╣ рд╕рддреНрд░ рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рдП?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл request рдкрджреНрдзрддрд┐ рдХреЛ рд╢рд┐рдо рдХрд┐рдпрд╛ рдЬрд╛рдП?

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 рдореЗрдВ рд▓реЗрдХрд┐рди #резрезрейреж рдФрд░ #резрелремрей (рдЗрд╕ рдкреВрд░реЗ рд╡рд░реНрд╖) рдореЗрдВ рднреАред рдХреЗрдиреЗрде рдиреЗ рдЖрдо рддреМрд░ рдкрд░ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рдХреА рдХрдореА рд╡реНрдпрдХреНрдд рдХреА рд╣реИ, рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рдХрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд░рддреЗ 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 рдкрджреНрдзрддрд┐ рдХреЛ рд╢рд┐рдо рдХрд┐рдпрд╛ рдЬрд╛рдП?

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)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЦреЗрд▓рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд┐рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдЖрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

avinassh picture avinassh  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JimHokanson picture JimHokanson  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ReimarBauer picture ReimarBauer  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Gonzalliz picture Gonzalliz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tiran picture tiran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ