Requests: рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬрдире░ 2013  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдлреЙрд░реНрдо рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ r = requests.post(url, data=payload, files=files)
рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

Content-Disposition: form-data; name="file"; filename="filename.txt"
Content-Type: text/plain

content
--3eeaadbfda0441b8be821bbed2962e4d--

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

Content-Disposition: form-data; name="key1"

value1
--3eeaadbfda0441b8be821bbed2962e4d

рд▓реЗрдХрд┐рди рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдкреВрд░реНрд╡ рдХреЗ рдмрд┐рдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рд╢рд╛рдпрдж рд╣рдо r = requests.post(url, data=payload, multipart=True) рдЬреИрд╕рд╛ рдлрд╝реНрд▓реИрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдкреЛрд╕реНрдЯ рдХреЛ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреА рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред

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

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

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

рд╢рд╛рдпрдж @kennethreitz рджреВрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ

рджрд░рдЕрд╕рд▓, рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдмреБрд░реА рдмрд╛рдд рд╣реИред рдЕрдВрдХ #935 рдФрд░ shazow/urllib3/рдореБрджреНрджреЛрдВ/120 рджреЗрдЦреЗрдВ

рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрджрд▓рд╛рд╡ рдореБрдЭреЗ рдорд╛рдореВрд▓реА рд▓рдЧрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣рд╛рдВ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рд╣реИ: https://github.com/spacecase/requests/commit/45b0b3ce1e76b241b323570a5fc88ae2089c3c3d
(рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ? рдореИрдВ рдЬреАрдердм рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ)ред

рдЗрд╕реЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ api.py рдореЗрдВ рдПрдХ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЙрдЪрд┐рдд рд╣реИ?

рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд▓рди рд╣реИред рдореИрдВ рдЗрд╕ рдЪрд▓ рд░рд╣реА рдЪрд░реНрдЪрд╛ рдореЗрдВ рдмрд╛рдбрд╝ рдкрд░ рд╣реВрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди files рдПрдкреАрдЖрдИ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ . рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ multipart рдХреЛ Request API рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ 100x рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рдФрд░ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдбрд╝ рдкрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

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

_(...) рдХреЛрдИ рдЬреЗрд╕рди рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛_

рдЗрд╕ рддрд░рд╣ рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд╛ рдХреЛрдИ рдЖрдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ json application рдореАрдбрд┐рдпрд╛ рдЯрд╛рдЗрдк ( rfc4627 ) рдХрд╛ рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рд╣реИ рди рдХрд┐ multipart рдореАрдбрд┐рдпрд╛ рдЯрд╛рдЗрдк ( httpbis рдбреНрд░рд╛рдлреНрдЯ 21 )

_рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ (...)_

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдЬрдмрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: multipart/form-data рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рдЖрдо рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ MIME рдкреНрд░рдХрд╛рд░ рд╣реИ (рдЙрджреНрдзрд░рдг рд╡рд╛рдВрдЫрд┐рдд :)) рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдПрдХ рд╕рдХрд▓ рдЪреВрдХ рд╣реИред

@ рдкрд┐рдпреЛрдЯреНрд░-рдбреЛрдмреНрд░реЛрдЧреЛрд╕реНрдЯ: рдореИрдВрдиреЗ рдКрдкрд░ рдЬреЛ рдХрд╣рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореБрдЭреЗ рд╡рд╣ рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдереЛрдбрд╝рд╛ рд╕рдореНрдореЛрд╣рдХ рдмрдирд╛рдпрд╛ рдерд╛ред

рдЕрдиреБрд░реЛрдз MIME рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдКрдкрд░ рджреА рдЧрдИ рдЖрдкрдХреА рджреЛрдиреЛрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JSON рдкреИрд░рд╛рдореАрдЯрд░ рди рд╣реЛрдиреЗ рдХреА рд╢рд┐рдХрд╛рдпрдд рдЗрд╕рд▓рд┐рдП рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ JSON-рд╕реНрд╡рд░реВрдкрд┐рдд рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ - рдЧреИрд░-рдлрд╝рд╛рдЗрд▓ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЖрдо рд╣реИред рдпрд╣ рддрд░реНрдХ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ 'рд╣рдо рдХреЗрд╡рд▓ multipart рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕ рдЙрдкрдкреНрд░рдХрд╛рд░' рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░ рдмрд╛рдд рдХреА рддрд░рд╣ рд▓рдЧрддреЗ рд╣реИрдВред

рднрд▓реЗ рд╣реА, рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдореВрд▓ рдпрд╣ рд╣реИ: рдПрдкреАрдЖрдИ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _рд╕реБрдВрджрд░_ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдРрд╕реА рд╢рд┐рдХрд╛рдпрдд рдХрд╛ рдХреЛрдИ рдЖрдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ [sic]

@ piotr-dobrogost рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдореБрдЭрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд░реЛрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ form_data рддреБрд▓рдирд╛ рдореЗрдВ multipart form_data рдЬреИрд╕рд╛ рдХреБрдЫ рдФрд░ рдХрд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреЛрдЯ рдХрд░рддреЗ рд╣реИрдВ, (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ) multipart рд╡рд┐рднрд┐рдиреНрди рдореАрдбрд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдЬрдмрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА рдЪреАрдЬреЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАрдВ (рдкрд╛рдпрдерди рдореЗрдВ рднреА)ред

рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ data рд▓рд┐рдП application/x-www-form-urlencoded , files (рдпрд╛ files+data ) рдХреЗ рд▓рд┐рдП multipart/form-data , рд╣рдореЗрдВ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдХреЗрд╡рд▓ multipart/form-data рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ?

рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ data рдФрд░ files рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: requests.post('http://example.com/', files=[('key1', 'param1'), ('key2', 'param2')]) рд╡рд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд┐рдирд╛ред

рдФрд░ рдЕрдЧрд░ рд╣рдо рд╕рдЯреАрдХ рд╣реЛрдВ, рддреЛ form_data рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ multipart_form_data , рд▓реЗрдХрд┐рди рдЕрдм рд╡рд╣ рднреА рдЕрдирд╛рдбрд╝реА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рд╛рдБ, рдФрд░ рдкреАрдИрдкреА 8 рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ ред рдпрджрд┐ @kennethreitz рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

@sigmavirus24 рдФрд░ @Lukasa рдиреЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рд╣реИред

@piotr-dobrogost рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕реНрд╡рд░ рдХреА рдирд╣реАрдВред рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЙрд╕рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рджреГрдврд╝ рджрд╛рд╡реЗ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВред

рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдХрд╛рдлреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБ-рднрд╛рдЧ рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред @ sigmavirus24 рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╣рд╛рдБ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣реЗрдЧреА, рдФрд░ рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

#935 . рдкрд░ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреЗрдВ

рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ!

@рд▓реБрдХрд╛рд╕рд╛

_рдЕрдиреБрд░реЛрдз MIME рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред_

multipart/form-data рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

_(...) JSON-рд╕реНрд╡рд░реВрдкрд┐рдд рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ (...)_

рд╣рдо multipart/form-data рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде json рднреЗрдЬрдиреЗ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЬреЗрд╕рди рднреЗрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ; рдЖрдк Content-type рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИред multipart/form-data рднреЗрдЬрдирд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, json рднреЗрдЬрдирд╛ рдЙрддрдирд╛ рд╣реА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдЬрд┐рддрдирд╛ HTTP рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ рд▓реЗрдХрд┐рди multipart/form-data рднреЗрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдиреБрд░реЛрдз HTTP рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

_рдпрджрд┐ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред_

рд╡рд░реНрддрдорд╛рди files рдкрд░рдо рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП multipart/form-data рдЬрд┐рд╕рдХрд╛ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ), рдлрд┐рд░ рднреА рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЖрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ :)ред рдХреБрдЫ рдХрдо рдмрджрд╕реВрд░рдд рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ :)

@sigmavirus24

_(...) рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред_

рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдХреЛрдИ рднреА рд░рд╛рд╢рд┐ рдЦрд░рд╛рдм рдПрдкреАрдЖрдИ рд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИред рдПрдкреАрдЖрдИ рдЬрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдЙрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдЙрддрдиреА рд╣реА рдХрдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

_рдЖрдк (...)_ рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рднреНрд░рд╛рдордХ рдФрд░ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП files рдкрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред

рдирд┐рдЪрд▓реА рдкрдВрдХреНрддрд┐: рдХреБрдЫ рдмреЗрд╣рддрд░ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ multipart/form-data рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЦрд░рд╛рдм рд╣реИред

@рд╕реНрдкреЗрд╕рдХреЗрд╕

_рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдХрд╛рдлреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБ-рднрд╛рдЧ рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ_

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ #935 рдЕрдВрдХ рдмрдирд╛рдпрд╛ рд╣реИред

рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реИред

рдореБрдЭреЗ @kennethreitz рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди @spacecase рдореИрдВрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╣реАрдВ рднреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рд╡рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВрдиреЗ рдПрдХ рдлрд╛рдЗрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛрддрд╛ рддреЛ рдЖрдкрдиреЗ open('filename') рджреЗрдЦрд╛ рд╣реЛрддрд╛ред

@ sigmavirus24 , рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╝рд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреЛрд╕реНрдЯ рдмреЙрдбреА рд╣реИ

Content-Disposition: form-data; name="key1"; filename="key1"
Content-Type: application/octet-stream

param1
--2f8732ee35564115a6c6e0c1032773e8
Content-Disposition: form-data; name="key2"; filename="key2"
Content-Type: application/octet-stream

param2
--2f8732ee35564115a6c6e0c1032773e8--

filename= рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЛ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╛рдЗрд▓ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рд╣реИред рд╡реЗрдм рдРрдкреНрд╕ рдореЗрдВ рдореИрдВ рдЗрд╕ рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЕрднрд┐рдорд╛рдиреА рд╣реЛрдирд╛ рдХрд┐ рдореИрдВ рд╡рд╣реА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдареЗрд╕ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдЖрдпрд╛ рдерд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рди рдХрд░рд╛рдПрдВ рдХрд┐ рдореБрдЭрд╕реЗ рдмрд╛рдд рдХреА рдЧрдИ рд╣реИред

рдПрдЪрдПрдо, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдпрд╛рдж рдЖрдпрд╛ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдлрд╝ рдХрд░рдирд╛ред рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдЖрдкрдХреЛ рдареЗрд╕ рдкрд╣реБрдБрдЪрд╛рдирд╛ рдпрд╛ рдЖрдкрдХреЛ рдиреАрдЪрд╛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ multipart/form-data рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрднреА рднреА рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред

@spacecase рдХреГрдкрдпрд╛ #935 рдкрд░ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреЗрдВред рдЪреАрдЬреЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдВрдЧреАред рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдмрд╣реБрдд рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИред :)

@spacecase рдПрдХ рдЗрд╢рд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреА рд░рд╛рдп рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ, рд╕реНрдЯреЙрдк-рдЧреИрдк рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ sigmavirus24/request-data-schemes рджреЗрдЦреЗрдВред рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ Content-Type рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @ sigmavirus24 , рдореИрдВ рдЗрд╕реЗ
рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рдареЗрд╕ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реВрдВред

рд╣рд╛рдБ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░реВрд░ рд╣реЛ рдЧрдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧ рдореБрдЭрд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирдореВрдирд╛ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЗрд░рд╛рджреЗ рдХреЗ рдмрд┐рдирд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдХреНрд░рд╛рдордХ рдХреНрдпрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдпрд╛рдж рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рдЧрдзреЗ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред

рдореЗрд░реЗ рдкрд╛рд╕ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХреБрдЫ рдХреБрдВрдЬреА-рдорд╛рди рд╣реИрдВред рддреЛ рдРрд╕реЗ рдореНрдпреВрдЯрд┐рд▓рдкрд╛рд░реНрдЯ-рдлреЙрд░реНрдо рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Content-Disposition: form-data; name="up"; filename="aa.PNG"
Content-Type: image/png

file data
---------------------------7dee5302248e
Content-Disposition: form-data; name="exp"


-----------------------------7dee5302248e
Content-Disposition: form-data; name="ptext"

text
-----------------------------7dee5302248e
Content-Disposition: form-data; name="board"

DV_Studio
-----------------------------7dee5302248e--

I tried this way but only got a 504 error.
myfile=[('file',open('bb.jpg')),('exp','python'),('ptext',''),('board','DV_Studio')]
r = requests.post(url,files=myfile)

рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП StackOverflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрд▓ рд░рд╣реА рд╣реИ sigmavirus24/requests-toolbelt

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ StackOverflow рдкрд░ рдкрд╣рд▓реЗ рджрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд┐рдирд╛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрджрд┐ рдЖрдк requests.post(url, data=data_dict) рдпрд╛ requests.post(url, data=data_dict, files={}) рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ files рдХреАрд╡рд░реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ None , multipart/form-data рдЬрдм files={} рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ application/x-www-form-urlencoded рдЬрдм рдирд╣реАрдВред

рдХреНрдпрд╛ рдореБрдЭрд╕реЗ рдХреБрдЫ рдЫреВрдЯрд╛?

@jwoillez рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдерд╛?

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдкрд░ рдЖрдкрдХрд╛ рдЬрд╡рд╛рдм рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдкреЛрд╕реНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдореИрдВ рдореВрд▓ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЧрдпрд╛: рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреЛрд╕реНрдЯ рдХреЛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдХрд░реЗрдВред

рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред =) рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдЦрддреНрдо рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛:

Content-Disposition: form-data; name="file"; filename="filename.txt"
Content-Type: text/plain

content
--3eeaadbfda0441b8be821bbed2962e4d--

рдЬрд╣рд╛рдВ content рд╡рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╣реВрдВ:

Content-Disposition: form-data; name="key1"

value1
--3eeaadbfda0441b8be821bbed2962e4d

рдЯрдкрд▓ рдореЗрдВ рдЬрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

files = {'name': ('', 'content')}

рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ StackOverflow рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред рд╕рднреА рдЕрдиреБрд░рдХреНрд╖рдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реИред

рдпрд╣реА рд╡рд╣ рдЬрд╡рд╛рдм рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛, рдзрдиреНрдпрд╡рд╛рджред рд╢реЛрд░ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рд╢рд╛рдпрдж рдПрдХ рдЖрдЦрд┐рд░реА рд╕рд╡рд╛рд▓, рдХреНрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрднрд╡ рд╣реИ (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдЦрд╛рд▓реА рд╕рд╛рдордЧреНрд░реА)?

Content-Disposition: form-data; name="file"; filename=""
Content-Type: text/plain


--3eeaadbfda0441b8be821bbed2962e4d--

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

рдореБрдЭреЗ рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдо рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:

class ForceMultipartDict(dict):
    def __bool__(self):
        return True


FORCE_MULTIPART = ForceMultipartDict()  # An empty dict that boolean-evaluates as `True`.


client.post("/", data={"some": "data"}, files=FORCE_MULTIPART)

рдпрд╛ рдЖрдк рдЯреВрд▓рдмреЗрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣реИрдХреНрд╕ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗред

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

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

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

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

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

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

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