Requests: рд╕рддреНрд░ рдХрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рджрд┐рд╕ре░ 2015  ┬╖  35рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдореИрдВ рдбреЗрд╡рд▓рдкрд░-api.nest.com рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдФрд░ рдмрд┐рдпрд░рд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреБрдЫ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░, рдПрдкреАрдЖрдИ 307 рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддрдм рднреА рдореБрдЭреЗ рдмрд╛рдж рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде requests.get() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдХрд░, 307 рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЦреБрдж рдирдпрд╛ рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмрдЧ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛?

In [41]: s = requests.Session()

In [42]: s.headers
Out[42]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0'}

In [43]: s.headers['Authorization'] = "Bearer <snip>"

In [45]: s.get("https://developer-api.nest.com/devices/thermostats/")
Out[45]: <Response [401]>

In [46]: s.get("https://developer-api.nest.com/devices/thermostats/")
Out[46]: <Response [200]>

In [49]: Out[45].history
Out[49]: [<Response [307]>]

In [50]: Out[46].history
Out[50]: []

In [51]: Out[45].request.headers
Out[51]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0'}

In [52]: Out[46].request.headers
Out[52]: {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'User-Agent': 'python-requests/2.7.0 CPython/3.4.3 Darwin/15.2.0', 'Authorization': 'Bearer <snip>'}

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

рджреЛ рдиреЗрд╕реНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВред

рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп access_token рдХреЗ рд╕рд╛рде auth рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ https://gist.github.com/tylerdave/409ffa08e1d47b1.112323 рдкрд░ рдкрд╛рдпрд╛

рдПрдХ рдФрд░ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдкрд╛рд░рд┐рдд рдХрд░реЗрдВ:

    headers = {'Authorization': 'Bearer ' + access_token, 'Content-Type': 'application/json'}
    initial_response = requests.get('https://developer-api.nest.com', headers=headers, allow_redirects=False)
    if initial_response.status_code == 307:
        api_response = requests.get(initial_response.headers['Location'], headers=headers, allow_redirects=False)

рд╕рднреА 35 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╣рд╛рдВ рд╣реИ?

рдЖрд╣, рдПрдХ рдЕрд▓рдЧ рдбреЛрдореЗрдиред firebase-apiserver03-tah01-iad01.dapi.production.nest.com

рд╣рд╛рдБ, рддреЛ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ: рдЬрдм рд╣рдо рдПрдХ рдирдП рд╣реЛрд╕реНрдЯ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЖрдХреНрд░рд╛рдордХ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рд╕реАрд╡реАрдИ 2014-1829 рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдСрдл-рд╣реЛрд╕реНрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкрд░ рд╣реЗрдбрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдореЗрдВ рдЕрднреА рднреА рдпрд╣рд╛рдБ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ, Session рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ "рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИ, рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗрдВ"ред рдореИрдВ рдЕрднреА рднреА _think_ рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╣рдорд▓реЗ рдХреЗ рдХрд┐рд╕реА рднреА рд░реВрдк рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдпрд╣ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рд╣рдж рддрдХ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдЦреБрд▓рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕реБрдирдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, _allowed_ рдбреЛрдореЗрди рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рддрдВрддреНрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ rebuild_auth рдореЗрдВ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ "рдЕрд╕реБрд░рдХреНрд╖рд┐рдд" рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдЙрди рд╣реЗрдбрд░ рдХреЛ (nest.com, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ) рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдбреЛрдореЗрди рд╕реЗрдЯ рдХрд░рдирд╛ рдпрд╛ рд╢рд╛рдпрдж рдЙрди рдбреЛрдореЗрди рдХреА рд╕реВрдЪреА рдЬреЛ рдЙрдиреНрд╣реЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИрдВред

рд╣рд╛рдБ, рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдореВрд▓ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдСрдереЛрд░ рдХреНрд▓рд╛рд╕ / рд╣реИрдВрдбрд▓рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрд╛рдлреА рдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рд╣рдо рдмрд┐рдирд╛ рд╢рд░реНрдд prepare_auth рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдорд╛рдирдХ рдореЙрдбрд▓ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмрд┐рдирд╛ рд╢рд░реНрдд prepare_auth рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдЙрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рд╣реЛред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреАрдП рдмрд┐рд▓реНрдХреБрд▓ рдЧрд▓рдд рдмрд╛рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред

  • рдпрджрд┐ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдСрд░реНрдерд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
  • рд╢рд╛рдпрдж рд╣рдореЗрдВ session.auth рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдСрд░реНрдерд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВ рдмреБрдирд┐рдпрд╛рджреА рддреМрд░ рдкрд░ рдЕрд╕рд╣рдордд рд╣реВрдВред рд╕рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╡реЗ рд╣реЛрддреЗ рддреЛ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреАред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╕рддреНрд░ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рдПрдХ рдЯрдкрд▓ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдереАред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдЬреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз- рдЯреВрд▓рдмреЗрд▓ рд╕реЗ

рдореБрдЭреЗ рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рд╣реЗрдбрдбреНрд░реЗрд╕ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦ рд╕рдХреВрдВред

@jtherrmann рдпрджрд┐ рдпрд╣ рдПрдХ

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВред

@ethanroy рд╕рддреНрд░ рд╕реНрддрд░реАрдп рд╕реНрддрд░реАрдп рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рд╕реЗ рдкрд░реЗ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд╕реАрдзреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВред

рд╕рдВрдмрдВрдзрд┐рдд: рдпрджрд┐ рдПрдХ рд╕рддреНрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░рд┐рдк рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ get рдХреЙрд▓ рдХрд░рдирд╛ рдлрд┐рд░ рд╕реЗ рдСрд░реНрдердкреНрд▓рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢реНрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рджреЛ рдмрд╛рд░ рдЦрдЯрдЦрдЯрд╛рдУ рдФрд░ рддреБрдо рдЕрдВрджрд░ рдЖ рдЬрд╛рдУред

>>> s = requests.Session()
>>> s.headers.update({"Authorization": "Token {}".format(API_TOKEN)})
>>> s.get(url)

<Response [403]>

>>> s.get(url)

<Response [200]>

@GregBakker рд╣рд╛рдВ, рдИрд╢ред рдпрд╣ рдЕрднреАрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рд╕рдВрдЧрдо рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдмрдЧ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ 403 рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@Lukasa рдЬрдм рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рд╕рддреНрд░ рд╕реНрддрд░реАрдп рд╕реНрддрд░реАрдп рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ," рдХреНрдпрд╛ рд╡рд╣ рдЪреАрдЬ рд╣реИ рдЬреЛ рдЖрдЬ рдХрд╛рдо рдХрд░рддреА рд╣реИ? рдХреЛрдб рдореЗрдВ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рд╢рдмреНрдж рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред рдЖрдк рд╕рддреНрд░ рдСрд░реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реИ рдирд╛?

рд╣рд╛рдБ, рд╡рд╣ _should_ рдХрд╛рдоред

@jwineinger рддреЛ рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реБрдП? рдЕрднреА рднреА рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред

рджреЛ рдиреЗрд╕реНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВред

рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп access_token рдХреЗ рд╕рд╛рде auth рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ https://gist.github.com/tylerdave/409ffa08e1d47b1.112323 рдкрд░ рдкрд╛рдпрд╛

рдПрдХ рдФрд░ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдкрд╛рд░рд┐рдд рдХрд░реЗрдВ:

    headers = {'Authorization': 'Bearer ' + access_token, 'Content-Type': 'application/json'}
    initial_response = requests.get('https://developer-api.nest.com', headers=headers, allow_redirects=False)
    if initial_response.status_code == 307:
        api_response = requests.get(initial_response.headers['Location'], headers=headers, allow_redirects=False)

рдореИрдВрдиреЗ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ rebuild_auth рддрд░реАрдХрд╛ рдХрд╕реНрдЯрдо requests.Session рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

from requests import Session

class CustomSession(Session):
    def rebuild_auth(self, prepared_request, response):
        return

s = CustomSession()
s.get(url, auth=("username", "password"))

@ gigriel-loo рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ @ sigmavirus24 ? рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдпреЗрдВ?

@ j0,000ue рд╣рд╛рдБред рдХреГрдкрдпрд╛ рдзрд╛рдЧрд╛ рдкрдврд╝реЗрдВред рдирдП рдбреЛрдореЗрди рдкрд░ рдордирдорд╛рдиреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реАрд╡реАрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ:

рдореИрдВ api.github.com рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдореБрдЭреЗ another-domain.com рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЕрдиреБрд░реЛрдзреЛрдВ рд╕рд╣рд┐рдд) рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рддрд╛ рд╣реВрдВред рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдореИрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрд░рд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмрд┐рдирд╛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рдЕрдкрдиреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛ рд╣рд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВред

рдлрд┐рд░ рднреА, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдкрдиреА рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдЦ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВ? рдореВрд▓ рд╕реЗрд╡рд╛ рдЖрдкрдХреЗ, рдЖрдкрдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдирдпрд╛ рдбреЛрдореЗрди рдЬрд┐рд╕реЗ рдЖрдк рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдЖрдкрдХреА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЙрди рдкрд░ рд╣рдорд▓рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рд▓реЙрдЧ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рдбреЛрдореЗрди рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдиреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдЬрд╣рд╛рдВ рдкрд╣реЗрд▓реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЬреЛрдЦрд┐рдо рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ?

рдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @ sigmavirus24ред рдпрджрд┐ рдпрд╣ рдЪрд┐рдВрддрд╛ рдЕрдВрддрддрдГ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЗрдбрд░ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдзрд╛рдЧрд╛ рдЕрднреА рднреА рдХреНрдпреЛрдВ рдЦреБрд▓рд╛ рд╣реИ? рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд (403) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рд╡рд╣рд╛рдВ рд╣реИ? рдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдХреНрдпрд╛

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдорд╛рд░ рд░рд╣рд╛ рдерд╛ рдЬрдм рдПрдХ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрджрд╛рд░реА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкрд░ рдСрдЙрдЯрдкреНрд▓ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ gabriel-loo рдХреА рддрд░рд╣ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реИрдВред рдпрд╛ рд╕рддреНрд░ рд╕реНрддрд░ рд╣реИрдВрдбрд▓рд░ред рдпрд╛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рд╕реНрдХрд┐рдк рдХрд░рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ рджреЗрдЦрдиреЗ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдореЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдЬрд▓рд╛ рджрд┐рдпрд╛, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХрд┐ рдореБрдЯреНрдареА рднрд░ рдЕрдиреНрдп рдЧреИрд░-рдкрд╛рдпрдерди HTTP рдХреНрд▓рд╛рдЗрдВрдЯ _did_ рдХреЛ рдСрд░реНрдЯрд┐рдХрд▓ рд╣реЗрдбрд░ рдкрд░ рдХреИрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рддреЛ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗред рдПрдХ рд╕реБрдЭрд╛рд╡: рд╣реЗрдбрд░ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдФрд░ рдЫреАрди рд▓рд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП warnings рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рд╣реИред _not_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдПрдЧреАред

@tlantz рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЙрдЪрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд░реЛрдз (рд╕рд╛рде рд╣реА urllib3, рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ) рдиреЗ ire рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рддреНрд░рд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдореЙрдбреНрдпреВрд▓ рдпрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреЗрддрд╛рд╡рдиреА рдореЙрдбреНрдпреВрд▓ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рди рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛, рдЬрд┐рд╕реЗ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрддрдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреАрдПрд▓рдПрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдирд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рд╡реИрдз рд╣рддрд╛рд╢рд╛ рд╡реНрдпрдХреНрдд рдХреА рд╣реИред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ DEBUG рд╕реНрддрд░ рдкрд░ рдЗрд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рд▓реЙрдЧрд┐рдВрдЧ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕рднреНрдп рдЕрднреНрдпрд╛рд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕реНрддрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рддрд╛ рд╣реИред Futher, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдбрд┐рдмрдЧ рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрдХреНрд╖ рд╡реНрдпрд╛рдкрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред warnings рдЖрд╕рдкрд╛рд╕ рддрд░реНрдХ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк 30 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╣реИрд░рд╛рди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЖрдк рдЖрдорддреМрд░ рдкрд░ logging рдЕрдкрдиреЗ рд╕рд╛рдорд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ DEBUG рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ DEBUG рд╕рдВрджреЗрд╢ 95% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд▓реЛрдЧ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдореЗрдВ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдЕрдиреБрд░реЛрдз (2.18.4)

рдПрдХ рд╕рд╣рдХрд░реНрдореА рдФрд░ рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рдЬреЛ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдореБрджреНрджрд╛ рдерд╛ред рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ api.my-example-site.org рд╕реЗ www.api.my-example-site.org API API рдХреЙрд▓ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкрд░ рд╣реЗрдбрд░ рдЫреАрдиреЗ рдЬрд╛ рд░рд╣реЗ рдереЗред

рдпрджрд┐ рдпрд╣ рдЕрднрд┐рдкреНрд░реЗрдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ (рдпрд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛), рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЙрди рдбреЙрдХреНрд╕ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛, рдЬреЛ рдореИрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВрдиреЗ Request рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕рднреА рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдкрдврд╝рд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЦреА рд╣реЛрддреА, рддреЛ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдореБрджреНрджрд╛ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рддрдп рдХрд░ рд▓рд┐рдпрд╛ рд╣реЛрддрд╛ (рдЬреЛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдзрд╛рдЧрд╛ рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рдо рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЧрд▓рдд рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдкрдврд╝ рд░рд╣реЗ рдереЗ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред

рд╣рд╛рдп @ndmeiri , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рд╢реАрд░реНрд╖рдХ рдХреЗ рддрд╣рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд-рдкреНрд░рд╛рд░рдВрдн рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕ рдкрд░ рдХреЙрд▓ рдЖрдЙрдЯ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдпрд╛ рдкреАрдЖрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдзреЗ рдЗрд╕ рдЯрд┐рдХрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдп @nateprewitt , рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдкрд░ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓ рдЖрдЙрдЯ, рдпрд╛ рдХреЙрд▓ рдЖрдЙрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдлреА рд╡реНрдпрд╕реНрдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рд╢рд╛рдВрдд рд╣реЛрддреА рд╣реИрдВ рддреЛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдпрджрд┐ рдпрд╣ рдЕрднрд┐рдкреНрд░реЗрдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ

@ndmeiri рд╣рд╛рдВ, рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЕрдкрдиреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рд▓реАрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред (рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ # 4983 рд╕реЗ "рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЛрдореЗрди" рдЕрдм рд╕рддреНрд░рд╣реЛрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдХ URL рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ _know_ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднрд┐рдиреНрди-рд▓реЗрдХрд┐рди-рд╕реБрд░рдХреНрд╖рд┐рдд URL рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреА рджреГрдврд╝рддрд╛ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛?

рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛?

рдЖрдк rebuild_auth рдкрджреНрдзрддрд┐ рдХреЛ рдкреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/DHI-GRAS/earthdata-download/blob/master/earthdata_download/download.py#L27 -L49

@ j0coinue рдзрдиреНрдпрд╡рд╛рдж! рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ allow_redirects рд╕реЗ False рдХрд╛ рдЕрдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдХреЛрдб рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИред

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

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

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

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

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

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

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