Requests: рдЯреАрдПрд▓рдПрд╕ рдПрд╕рдПрдирдЖрдИ рд╕рдкреЛрд░реНрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдЧре░ 2012  ┬╖  46рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ TLS SNI рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрдм рд╣реЛрдЧреА? рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж,
--рдЯрдХреНрдХрд░ рдорд╛рд░рдирд╛

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

рдпрд╣ рдЕрдиреБрд░реЛрдз/рдкреИрдХреЗрдЬ/urllib3/contrib/pyopenssl.py рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ :

  • pyOpenSSL (0.13 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • ndg-httpsclient (0.3.2 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • pyasn1 (0.1.6 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)

(рдпрд╛ python3.2 рдпрд╛ рдЙрдЪреНрдЪрддрд░, рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)

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

Stdlib рдХреЗ ssl рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ Python 2.x рдореЗрдВ рдкреЙрд╕рд┐рдмрд▓ рдирд╣реАрдВ рд╣реИред

рдореБрдбрд╝ рдЧрдпрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╢рд╛рдпрдж pyopenssl рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп ssl рдореЙрдбреНрдпреВрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп?

urllib3 рдХреЗ рд▓рд┐рдП Py32+ рдХреЗ рд▓рд┐рдП SNI рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред https://github.com/shazow/urllib3/pull/89

shzow: рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб/рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореИрдВ 2.7 рдкрд░ рдЕрдЯрдХ рдЧрдпрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ pyopenssl + рдореБрдбрд╝ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдмрд╕ рдХреБрдЫ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬреИрд╕реЗ wget рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ ... :(

PyOpenSSL рдЗрд╕реЗ 2.x рдкрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдЖрд╢рд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ pyopenssl рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореБрдбрд╝рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд░рд╣реА рд╣реИред http://pbin.be/show/719/ -- рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд┐рд╕реА рдХреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдкрд░ рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрднреА рднреА рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рд╣реА рд╕рдВрджрд░реНрдн рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдПред

рд▓реБрдХрд╛рд╕рд╛: рдХреНрдпрд╛ рдпрд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛?

рдирд╣реАрдВ. рд╣рдореЗрдВ shazow/urllib3#89 рдкрд░ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.

рд╡рд┐рд▓рдп рд╣реЛрдирд╛ред рдЬрд╛рд░реА рд░рдЦреЛред :)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ Py32+ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдФрд░ рдЙрдЪрд┐рдд рдЪреЗрддрд╛рд╡рдиреА: Py32 рдкрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдЕрднреА urllib3 рдорд╛рд╕реНрдЯрд░ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдорджрдж рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреА (рдФрд░ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ): https://github.com/shazow/urllib3/issues/128

рдореЗрд░реЗ рд▓рд┐рдП py26, py27, py32, py33 рдкрд░ рдЖрд░реНрдЪрд▓рд┐рдирдХреНрд╕ x64 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЖрд╣ рдореБрдЭреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдХрд┐ рдпрд╣ рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рд╣реИред рдмрджрдорд╛рд╢ OSXред

t-8ch: рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП py26/27/32 рдФрд░ 33 рдкрд░ sni рдкрд░реАрдХреНрд╖рдг рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВ?

рдПрд╕рдПрдирдЖрдИ рдкрд░реАрдХреНрд╖рдг py2 рдкрд░ рднреА рдирд╣реАрдВ рдЪрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди py32 рдФрд░ py33 рдкрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
py32 рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрд╕рдПрд╕рдПрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрд╕рдПрдирдЖрдИ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

@shazow : рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ urllib3 рдХреЛ PyOpenSSL рдкрд░ рдирд┐рд░реНрднрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рд╣реЛрдЧреА рдЬреЛ рдПрд╕рдПрд╕рдПрд▓ рдХреЛ PyOpenSSL рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ urllib3 рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ t-8ch urllib3 рдкрд░ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкрд╛рд░реНрдХ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЙрд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

urllib3 рдореЗрдВ рдХреБрдЫ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд╛рдЗрдерди 2 рдХреЗ рд╕рд╛рде рдПрд╕рдПрдирдЖрдИ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд░реНрдерди рд╣реИред (рджреЗрдЦреЗрдВ urllib3#156 )ред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

from requests.packages.urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3

рдЗрд╕реЗ packages рдореЗрдВ setup.py рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж

requests.packages.urllib3.contrib

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ contrib рдкреИрдХреЗрдЬ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ SNI рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдПрд╕рдПрдирдЖрдИ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реИред (рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрд╕рдПрдирдЖрдИ рд╕рдорд░реНрдерди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред
  • рдкреВрд░реНрд╡-рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ SNI рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред

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

рдмреАрдЯреАрдбрдмреНрд▓реВ: рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ urllib3 рд╕реЗ рд╕рдорд░реНрдерди рд╣реИ?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реНрд╡ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рд╡реЗ рдЗрддрдиреЗ рдХрдо рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рд┐рдХрд╛рдпрддреЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, urllib3 (рдФрд░ рдЕрдиреБрд░реЛрдз) ssl рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд┐рдирд╛ HTTPS рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП API рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ ssl рдореЙрдбреНрдпреВрд▓ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдкреАрдЖрдИ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ @kennethreitz рддрдХ рд╣реИред рдмреЗрд╢рдХ (рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде) рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдлреАрдЪрд░ рдлреНрд░реАрдЬ (#1165, #1168) рдХреЗ рддрд╣рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрдзрд╛ рдлреАрдЪрд░ рд╣реИ, рдЖрдзрд╛ рдмрдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ @kennethreitz рдХреЗ рдЬрд╡рд╛рдм рдХрд╛ рдЗрдВрддрдЬрд╛рд░

рд╣реНрдпреВрдЧреЛ: рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА pip install -U рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬрдм рдореИрдВ contrib рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореБрдЭрд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛? (рдЖрдпрд╛рддрдХ: рдпреЛрдЧрджрд╛рди рдирд╛рдо рдХрд╛ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ)ред

рд╢реБрдХреНрд░, 3 рдордИ, 2013 рдХреЛ рджреЛрдкрд╣рд░ 1:12 рдмрдЬреЗ, рд╣реНрдпреВрдЧреЛ рдУрд╕реНрд╡рд╛рд▓реНрдбреЛ рдмрд░реНрд░реЗрд░рд╛ <
рд╕реВрдЪрдирд╛рдПрдВ@github.com> рдиреЗ рд▓рд┐рдЦрд╛:

urllib3 рдореЗрдВ рдЕрдЬрдЧрд░ 2 рдХреЗ рд╕рд╛рде SNI рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд░реНрдерди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдХреЗ рд╕рд╛рде
рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ред (рджреЗрдЦреЗрдВ urllib3#156https://github.com/shazow/urllib3/pull/156
)

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

request.packages.urllib3.contrib рд╕реЗ рдЖрдпрд╛рдд pyopenssl
pyopenssl.inject_into_urllib3

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпреЛрдЧрджрд╛рди рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ SNI рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдПрд╕рдПрдирдЖрдИ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдЪрд▓рд╛рддрд╛ рд╣реИ
    рдХреЛрдбред (рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрд╕рдПрдирдЖрдИ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
    рд╕рд╣рдпреЛрдЧ)ред
  • рдкреВрд░реНрд╡-рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ, рддреЛ SNI рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛
    рдирд╣реАрдВред

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/kennethreitz/requests/issues/749#issuecomment -17406518
.

рдЕрдиреБрд░реЛрдз рдХреЗ setup.py рдореЗрдВ рд╡рд╣ рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ (рд╡рд╣ рд╕реНрд░реЛрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓/рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:

рдЗрд╕реЗ packages in setup.py рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж
request.packages.urllib3.contrib

рдЖрдкрдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВ, рдпрд╣ рдХрд╛рдо рдХреЗрд╡рд▓ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдХрд░рдирд╛ рд╣реИред :)

"рдпрджрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбрд┐рдкреЛ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рддреЛ рдПрд╕рдПрдирдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред"

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрд╕рдПрд╕рдПрд▓ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдореЗрд░реА рдмрд╛рдд рдереАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ https рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдХрдард┐рди рдФрд░ рддреЗрдЬрд╝ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛, рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рдПрд╕рдПрдирдЖрдИ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ urllib3 рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдзрд╛рд░рдгрд╛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реЗрдЯ-рдЕрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗред рдЕрдЧрд░ рд╕рд┐рд░реНрдл #1347 рдЬрд░реВрд░реА рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдкреАрдЫреЗ 100% рд╣реВрдВред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдПрд╕рдПрдирдЖрдИ рд╕рдорд░реНрдерди) рдФрд░ рдЕрдиреБрд░реЛрдз рдерд╛
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдпрд╛ рд╕реНрд░реЛрдд рд╕реЗ рд╕реЗрдЯрдЕрдк рдХреЗ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред urllib3 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ 2
рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБред рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдХреНрдпрд╛ рдореИрдВ рджрд┐рди рдореЗрдВ рд╕рдкрдирд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ? :)

рд╢реБрдХреНрд░, 3 рдордИ, 2013 рдХреЛ рд░рд╛рдд 10:43 рдмрдЬреЗ, рдЗрдпрд╛рди рдХреЙрд░реНрдбрд╛рд╕реНрдХреЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.comрд▓рд┐рдЦрд╛:

"рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдПрд╕рдПрдирдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред"

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрд╕рдПрд╕рдПрд▓ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдореЗрд░реА рдмрд╛рдд рдереАред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрдард┐рди рдФрд░ рддреЗрдЬрд╝ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдХ https рдЕрдиреБрд░реЛрдзред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛, рдореИрдВ рдЙрд╕рдХреЗ рдЕрдзреАрди рдерд╛
рдЗрдВрдкреНрд░реЗрд╢рди рдПрд╕рдПрдирдЖрдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ urllib3 рдкрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдзрд╛рд░рдгрд╛рдПрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реЗрдЯ-рдЕрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗред рдпрджрд┐ рд╡рд╣ рд╕рдм рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рд╣реИ #1347 https://github.com/kennethreitz/requests/issues/1347 рддреЛ рдореИрдВ рд╣реВрдВ
рдЗрд╕рдХреЗ рдкреАрдЫреЗ 100%ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/kennethreitz/requests/issues/749#issuecomment -17426626
.

@pythonmobile рдПрдХ рд╢реАрд░реНрд╖ рд╕реНрдкрд┐рдиред рдпрджрд┐ рдпрд╣ рдШреВрдордирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдкрдирд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

inception

рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдирд╛ рдЬреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрджрд┐ рдЖрдкрдХреЛ requests рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Google рдРрдк рдЗрдВрдЬрди рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдРрдк рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдРрд╕рд╛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдерд╛ "рдИрдУрдПрдл рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЙрд▓реНрд▓рдВрдШрди рдореЗрдВ рд╣реБрдЖ"ред рдЗрд╕рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, s_client рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рд╣реЛрд╕реНрдЯ рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ( example.com рдХреЛ рдкреНрд░рд╢реНрди рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ):

openssl s_client -connect example.com:443
openssl s_client -connect example.com:443 -servername example.com

рдпрджрд┐ рдкрд╣рд▓рд╛ рдЖрджреЗрд╢ "рд╣реИрдВрдбрд╢реЗрдХ рд╡рд┐рдлрд▓рддрд╛" рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрд╕рдПрдирдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рд╕реВрддреНрд░ рдореЗрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ requests рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ ipython рдореЗрдВ from requests.packages.urllib3.contrib import pyopenssl рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдерд╛, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рднреА рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдкрд░ рд░рд╣рд╛ред рд╡рд╛рдИрдПрдордПрдорд╡реАред

@mshang рд╕рдВрд╕реНрдХрд░рдг 1.2.3 рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдХреНрдпрд╛ рдЖрдк рд╡рд╛рдХрдИ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?

@hobarrera рд╣рд╛рдБ, рдореИрдВ 1.2.3 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБред requests.packages.urllib3.contrib рд╡рд╣рд╛рдБ рдерд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рдиреЗ рдЕрднреА рднреА рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдореБрдЭреЗ ndg-httpsclient рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдореИрдВ рдФрд░ рдХреНрдпрд╛ рднреВрд▓ рдЧрдпрд╛ред

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

рдпрд╣ рдЕрдиреБрд░реЛрдз/рдкреИрдХреЗрдЬ/urllib3/contrib/pyopenssl.py рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ :

  • pyOpenSSL (0.13 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • ndg-httpsclient (0.3.2 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • pyasn1 (0.1.6 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)

(рдпрд╛ python3.2 рдпрд╛ рдЙрдЪреНрдЪрддрд░, рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрд╕рдПрдирдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдФрд░ urllib3 рджреЛрдиреЛрдВ рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдПрдХ
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЯрд╛рдЗрдордЖрдЙрдЯ = 5.0 рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ
рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмрд┐рдирд╛ред рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдЙрди рдбреЛрдореЗрди рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдПрд╕рдПрдирдЖрдИ рдбреЛрдореЗрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╡рд░реНрдЯреЗрдХреНрд╕/httpbin/. рд╡реЗ рджреЛрдиреЛрдВ рдПрд╕рдПрдирдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

рд╕реЛрдо, рдЬреВрди 10, 2013 рдХреЛ рд╕реБрдмрд╣ 4:57 рдмрдЬреЗ, рдереЙрдорд╕ рд╡реЗрдЗрд╕рдЪреБрд╣реЛ
рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди@github.comрд▓рд┐рдЦрд╛ :

рдпрд╣ рдЕрдиреБрд░реЛрдз/рдкреИрдХреЗрдЬ/urllib3/contrib/pyopenssl. pyhttps://github.com/kennethreitz/requests/blob/master/requests/packages/urllib3/contrib/pyopenssl.py
:

  • pyOpenSSL (0.13 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • ndg-httpsclient (0.3.2 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
  • pyasn1 (0.1.6 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)

(рдпрд╛ python3.2 рдпрд╛ рдЙрдЪреНрдЪрддрд░, рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/kennethreitz/requests/issues/749#issuecomment -19187417
.

@pythonmobile рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ urllib3 рдкрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЦреЛрд▓реЗрдВред рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХреЛрдИ рдПрд╕рдПрдирдЖрдИ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдирд╣реАрдВ рд╣реИ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рдПрдХ рдлрд┐рдХреНрд╕ рд╣рдореЗрдВ рднреА рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред

рдЬрдм рддрдХ urllib3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдареАрдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрди рджрд┐рдиреЛрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╢рд╛рдЬрд╝реЛ _et. рдЕрд▓._ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИрдВред @ t-8ch, рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛/рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ?

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @pythonmobile , рдореИрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдБред =)

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

рдЬрдмрдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ @ рд▓реБрдХрд╛рд╕рд╛ рдиреЗ рдХрд╣рд╛ рдерд╛, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ urllib3 рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред :)

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддреЛ рдореБрдЭреЗ рдкрд┐рдВрдЧ рдХрд░реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pyOpenSSL рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рд╣реИ
рдорд╛рдирдХ рдПрд╕рдПрд╕рдПрд▓ рдореЙрдбреНрдпреВрд▓:

from OpenSSL import SSL
import socket
import ssl

sock = socket.create_connection(('httpbin.org', 443), timeout=4.0)
ssl_sock = ssl.wrap_socket(sock)
ssl_sock.send('GET /ip HTTP/1.1\r\nHost: httpbin.org\r\n\r\n')
print(ssl_sock.recv(10000))

ctx = SSL.Context(SSL.TLSv1_METHOD)
sock = socket.create_connection(('httpbin.org', 443), timeout=4.0)
ctn = SSL.Connection(ctx, sock)
ctn.set_connect_state()

ctn.send('GET /ip HTTP/1.1\r\nHost: httpbin.org\r\n\r\n')
print(sock.read(10000))

рдпрд╣ рдПрдХ WantReadError рдлреЗрдВрдХрддрд╛ рд╣реИ, рд╡рд╣реА рдЬреЛ urllib3 . рд╕реЗ рднреА рдмрд╛рд╣рд░ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордпред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╣реИ
рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП:

The operation did not complete; the same I/O method should be called again
later, with the same arguments. Any I/O method can lead to this since new
handshakes can occur at any time.

The wanted read is for dirty data sent over the network, not the clean data
inside the tunnel. For a socket based SSL connection, read means data coming at
us over the network. Until that read succeeds, the attempted
OpenSSL.SSL.Connection.recv, OpenSSL.SSL.Connection.send, or
OpenSSL.SSL.Connection.do_handshake is prevented or incomplete. You probably
want to select() on the socket before trying again. 

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╕реЙрдХреЗрдЯ рдЬрд╛рджреБрдИ рд╣реИ
select() рдЖрд╣реНрд╡рд╛рди рдкрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдпрд╛рдж рд░рдЦреЗрдВ рдпрд╛ рдпрд╣ рдХрд╛рд░реНрдп рд╣реИ
urllib3?
рд╣рд╛рде рд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдордЬрд╝реЗрджрд╛рд░ рдирд╣реАрдВ рд▓рдЧрддрд╛ред

@pythonmobile рдЧреИрд░-рдореМрдЬреВрдж рдбреЛрдореЗрди рд╕реЗ

@pythonmobile рдХреНрдпрд╛ рдЖрдк shazow/urllib3#233 рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб pyopenssl рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

@t-8ch @pythonmobile : рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/kennethreitz/requests/issues/1522#issuecomment -22443282

рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ urllib3 рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдЗрдиреНрд╣реЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдпрд╛ #1522 рдХреЛ рдХрднреА рднреА рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛, рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд┐рдВрдбреЛрдЬ, рдУрдПрд╕ рдПрдХреНрд╕ рдпрд╛ рдЙрдмрдВрдЯреВ рд╣реЛред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ @pythonmobile рдХреЛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЕрдЧрд░ рд╣рдореЗрдВ рдХреЛрдИ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд┐рдХрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ @ t-8ch рдПрдХ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдмрдирд╛ рд░рд╣реЗрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ urllib3 рдкрд░ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ: @ t-8ch, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдФрд░ urllib3 рджреЛрдиреЛрдВ рдкрд░ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВред рддреБрдо рдХрдорд╛рд▓ рд╣реЛред =рдбреА:рдХреЗрдХ::рдЕрдирд╛рдирд╛рд╕::рдХреЗрд▓рд╛::рдХреБрдХреА::рдмреАрдпрд░реНрд╕:

@lukasa рдзрдиреНрдпрд╡рд╛рдж: рдореБрд╕реНрдХрд╛рди: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ AUTHORS.txt рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред

@ t-8ch рдХрд░реЛред :+1:

Shazow/urllib3#233 (рдЕрдм urllib3 рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ ( SSLError('bad handshake', WantReadError()) ) рдЬреЛ рдХреБрдЫ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛, рдХреБрдЫ рдмрд╛рд░, рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ: rage4:ред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ?

@rcoup рдЬрдм рд╣рдо 2.0 рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдо рдПрдХ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред =)

рдореИрдВ рдкрд╛рдпрдерди 2.7.6 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ pyOpenSSL рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ htis рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрд╛рдо arounds рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ -> https://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support/18579484#18579484

рдореИрдВ рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛ рднреА рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрд╛рдп?

рдореИрдВ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо "inject_into_urllib3 ()" рдХреЗ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЙрдкрдпреЛрдЧ (рдпрджрд┐ рдореМрдЬреВрдж рд╣реИрдВ) рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

7 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рд▓рдХреНрд╖реНрдп "рдкрд╛рдпрдерди 2 рдХреЗ рд▓рд┐рдП рдПрд╕рдПрдирдЖрдИ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛" рдерд╛

"urllib3.contrib.pyopenssl.inject_into_urllib3 ()" рдХреЛ "PyOpenSSL-рд╕рдорд░реНрдерд┐рдд SSL-рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдмрдВрджрд░-рдкреИрдЪ urllib3" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
(https://github.com/urllib3/urllib3/blob/master/src/urllib3/contrib/pyopenssl.py)

рдФрдЪрд┐рддреНрдп:
1: рд╕реБрд░рдХреНрд╖рд╛/рд╕реНрдерд┐рд░рддрд╛: рдХрд┐рд╕реА рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░реНрдЬрд┐рдХрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдкреИрдЪ Python2 рдореЗрдВ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрд╕рдПрдирдЖрдИ рд╕рдорд░реНрдерди рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ ssl.HAS_SNI ред

2: рдЕрдирд╛рд╡рд╢реНрдпрдХ: 10 рджрд┐рд╕рдВрдмрд░ 2014 рддрдХ, Python 3.4 рдХреЗ ssl рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХреЛ Python 2.7.9 рдХреЗ рд▓рд┐рдП рдмреИрдХрдкреЛрд░реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрдЪрд┐рддреНрдп рдХреЗ рд▓рд┐рдП рдкреАрдИрдкреА 466 рджреЗрдЦреЗрдВред https://www.python.org/downloads/release/python-279/ред рдпрд╣ > v2.7.9 . рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ SNI рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ

3: рдЕрдирдореНрдп: рдЬреИрд╕рд╛ рдХрд┐ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред requests pyopenssl рд╕рдВрджрд░реНрдн рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рдкреВрд░реЗ рдкрд╛рдпрдерди рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП pyopenssl рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реИред

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

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

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

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

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

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

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