çŸåšããã«ãããŒããã©ãŒã ãªã¯ãšã¹ããè¡ãå¯äžã®æ¹æ³ã¯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)
ãããªãã©ã°ãè¿œå ã§ããŸãã
ãããè¯ãèãã®ããã«æãããªããç§ã¯ãããå®è£ ããããšã«åãçµãã§ããããã§ãã
ããã¯ä»¥åã«è°è«ãããŸããã ããã¯ã @ kennethreitzãæãã§ãããã©ããããããªãAPIãžã®éèŠãªå€æŽãè¡šããŠããŸãã
å人çã«ã¯ãAPIã®èŸæžïŒã¿ãã«ã®ãªã¹ããªã©ïŒãããã«ãããŒãããŒã¿ãçæããé¢æ°ãå ¬éããŠããŠãŒã¶ãŒãããã䜿çšããçæãããããŒã¿ããªã¯ãšã¹ãã«æž¡ãããšãã§ããããã«ããããšããå§ãããŸãã è¡šé¢äžããã¡ã€ã«ã䜿çšããŠããªãå Žåãã¡ã¢ãªã«å€§ããªãããã¯ãªãã¯ãã§ãããããã§ããã¡ã¢ãªã«1ã€ã®å·šå€§ãªæååãããã2ã€ç®ã¯å®éã«ã¯ãããã殺ãããããã¯ç§ãã¡ã®ããã§ã¯ãªãã圌ãã®ããã§ãã
ããããã @ kennethreitzã¯2çªç®ã®è§£æ±ºçãããåãå ¥ããããã§ãããã ããããªã¯ãšã¹ãã®èšèšå²åŠã«ãé©åããŠããããAPIã®æ®ãã®éšåãèãããšéåžžã«å¥åŠã ãšæããŸãããç¥ã£ãŠãã人ã¯_è©ããããã_ã
å®éãçŸåšã®APIã¯ãã¡ã€ã«ä»¥å€ã®ãã«ãããŒãããŒã¿ã®éä¿¡ããµããŒãããŠããããããã¯æªãããšã§ãã åé¡ïŒ935ããã³shazow / urllib3 / issues / 120ãåç §ããŠãã ãã
äœãã足ããªããããããŸããããå€æŽã¯ç§ã«ã¯ããªããã€ããŒãªããã§ãã ãªããžããªããã©ãŒã¯ããããŒãžã§ã³ã®å€æŽãææ¡ããŸããïŒ https ïŒ
ïŒãããè¡ãããã®ããè¯ãæ¹æ³ãããå Žåã¯ãç§ã«ç¥ãããŠãã ããïŒç§ã¯githubã«ããªãæ
£ããŠããŸããïŒã
ããã€ãã®ãŠããããã¹ããå¿ èŠã§ãapi.pyã®docstringãå€æŽããå¿ èŠããããããããŸãããããã®ãããªãã®ã¯åççã§ããïŒ
å€æŽã®åé¡ã¯ãå®è£
ãè€éãªããšã§ã¯ãªããAPIã®çžéã§ãããšããããšã§ãã ç§ã¯ãã®é²è¡äžã®è°è«ã§äžçš®ã®å£æ ¹ãè¶ããŠããŸãïŒãã«ãããŒããã©ãŒã ããŒã¿ãã¢ããããŒãããããã®è¯ãæ¹æ³ããããšãããã䟿å©ã ãšæããŸãããçŸåšã®files
APIã¯éåžžã«è¯ããã®ã ãšæããŸãã multipart
ãRequest
APIã«è¿œå ããã®ãéã ãšã¯æããŸããã
æ£çŽãªãšãããç§ã¯å人çã«ã¯ã³ã³ãã³ãã¿ã€ãããããŒãä»ããŠãããå¶åŸ¡ããããšæããŸãããããã¯ããããçŸåšããã100åãšã©ãŒãçºçãããããæ°ãããŠãŒã¶ãŒãæ··ä¹±ãããã§ãããã ç§ãããã«ã€ããŠã¯å±æ©ã«çããŠããŸãããããã§ããããè¡ããªããšããåŽã«èª€ãããããŸãã
ã©ãããŠïŒ ãã®æ©èœãªã¯ãšã¹ããåãå ¥ãããšã誰ããjsonãã©ã¡ãŒã¿ãŒãæã£ãŠããªãããšã«ã€ããŠäžå¹³ãèšãå¯èœæ§ãé«ããªããŸãã ãããŠãä»ã®äººãè¿œå ããŠã»ãããã©ã¡ãŒã¿ãããã«æãã€ãããšãã§ãããšç¢ºä¿¡ããŠããŸãã çŸåšã®ããã«ãAPIã¯æ¬æ¥ããã¹ãããšãæ£ç¢ºã«å®è¡ããåé¡ã¯ã»ãšãã©ãŸãã¯ãŸã£ãããããŸããã ãããèŠã1ã€ã®æ¹æ³ã¯KISSã§ãã ããã«ããããªã¯ãšã¹ããäœæãããã¬ã¹ãã³ã¹ãç°¡åãã€èªç¶ã«äœ¿çšã§ããåªãããªããžã§ã¯ããè¿ãããŸãã ããã¯å®£äŒãããŠããããšãè¡ããæ®ãã¯ããªããè¡ããŸãã ãã«ãããŒããšã³ã³ãŒãã£ã³ã°ãã¢ããã¿ã€ãºããææžåãããèšèšãéããŠãããè¡ããŸãã ããã¡ãªãèŠãããããããŸããããææžåãããŠãããæ©èœããŸãã
_ïŒ...ïŒèª°ããjsonãã©ã¡ãŒã¿ãæã£ãŠããªãããšã«ã€ããŠäžå¹³ãèšãã§ããã_
jsonã¯multipart
ã¡ãã£ã¢ã¿ã€ãïŒ httpbisãã©ãã21 ïŒã§ã¯ãªãmultipart
application
ã¡ãã£ã¢ã¿ã€ãïŒ rfc4627 ïŒã®ãµãã¿ã€ãã§ããããããã®ãããªäžæºã®æ ¹æ ã¯ãããŸããã
_ããã¡ãªãèŠãããããããŸããïŒ...ïŒ_
ããã¯åä»ã§ãããããã§ã¯ãªãã¯ãã§ãã
以åã®ã³ã¡ã³ããèªãã åŸãç§ã®ç«å Žãç¹°ãè¿ããããšæããŸãã multipart/form-data
ã¯çŸåšäœ¿çšãããŠããæãäžè¬çãªãã«ãããŒãMIMEã¿ã€ãã§ããïŒåŒçšãå¿
èŠã§ã:)ïŒãããããµããŒãããªãããšã¯é倧ãªçç¥ã§ãã
@ piotr-dobrogostïŒç§ãäžã§èšã£ãããšã«ãããããããããªãããã£ãä»è¡ã£ãè°è«ã¯å°ãã§ã説åŸåããããšã¯æããŸããã
ãªã¯ãšã¹ãã¯MIMEã¿ã€ãããµããŒãããããŠãŒã¹ã±ãŒã¹ããµããŒãããŸãã ãã®èŠ³ç¹ãããäžèšã®äž¡æ¹ã®ã³ã¡ã³ãã¯å¥åŠã«èŠããŸãã ããšãã°ãJSONãã©ã¡ãŒã¿ããªãããšã«ã€ããŠã®äžæºã¯ãJSON圢åŒã®ããŒã¿ã®ã¢ããããŒããéåžžã«äžè¬çã§ããããã§ããããããããã¡ã€ã«ä»¥å€ã®ãã«ãããŒãããŒã¿ãã¢ããããŒãããããããªã¯ãšã¹ãã®ãŠãŒã¶ãŒã®éã§ããäžè¬çã§ãã ' multipart
ã®ç¹æ®ãªã±ãŒã¹ã®ãµãã¿ã€ãã®ã¿'ã§ãããããæäŸããªããšäž»åŒµããã®ã¯å¥åŠãªããšã®ããã«æããŸãã
ãšã«ãããåé¡ã®æ žå¿ã¯ããã§ãïŒAPIã¯ãã®ã©ã€ãã©ãªã®èŠç¹ã§ãã ãã®æ©èœãå®è£ ããããã®_çŸãã_æ¹æ³ãæãä»ãããšãã§ããªãå Žåãããã¯èµ·ãããŸããã
ãã®ãããªäžæºã®æ ¹æ ã¯ãããŸãã[åæã®ãŸãŸ]
@ piotr-dobrogostããªãã¯ç§ãããéçºè
ã®å°æ¥ã«ãã£ãšåžæãæã£ãŠããŸãã ãããè¶
ãããšãèŠæ±ããããã©ã¡ãŒã¿ãŒã¯äžæ£ç¢ºã§ãã form_data
ãããmultipart
form_data
ããã«åŒã³åºãå¿
èŠããããŸãã ãæ°ã¥ãã®ããã«ãïŒéæ¥çã§ã¯ãããŸããïŒ multipart
ã¯ããŸããŸãªã¡ãã£ã¢ã¿ã€ããåç
§ããå¯èœæ§ããããŸãã
ããã¯åä»ã§ãããããã§ã¯ãªãã¯ãã§ãã
ãã¹ãŠã®ãã®ããšã¬ã¬ã³ãã§ãããšã¯éããŸããïŒPythonã§ãïŒã
ãããŠããããµããŒãããŠããŸãã
ããããããã¯ãµããŒããããŠããŸãã ããããããŠãããæã
ãæã£ãŠããããšã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
䜿çšããªãã®ã¯ãªãã§ããããããããããäžåšçšã§ãã ããã¯æ瀺çã§ããã¯ãããããŠPEP 8ã¯æ瀺çã«èŠæ±ããŸãããæ¢åã®æ¯ãèãã¯ååã«ææžåãããŠããŸãã @kennethreitzããã®æ©èœãªã¯ãšã¹ããåãå
¥ããããšã決å®ããå Žåããã©ã¡ãŒã¿ãè¡ãå¿
èŠãããã®ã¯ãfilesãã©ã¡ãŒã¿ã®ãšã€ãªã¢ã¹ãšããŠæ©èœããããšã ãã§ãã ãããããã®åäœããã§ã«ãµããŒããããŠããããšãèãããšãããã¯å¿
èŠã§ã¯ãªããšæããŸãã
@ sigmavirus24ãš@Lukasaã¯ãããå®å šã«èŠçŽããŸããã
@ piotr-dobrogostããªãã®è²¢ç®ã¯é«ãè©äŸ¡ãããŠããŸãããããªãã®å£èª¿ã¯é«ãè©äŸ¡ãããŠããŸããã ç§ãã¡ã®ãããžã§ã¯ããšãã®ç®æšã«å¯ŸããŠç¢ºåºãã䞻匵ãããã®ã¯ãããŠãã ããã
ç§ã®èŠè§£ã§ã¯ããªã¯ãšã¹ãããã§ã«ãã«ãããŒãæçš¿ããµããŒãããŠããã®ã«ããã¡ã€ã«ã䜿çšããã«ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããããã«ãªã£ãŠããªãããšã¯éåžžã«èç«ãããããšã§ãã @ sigmavirus24ããã¡ã€ã«ãããã«è²Œãä»ãããšããææ¡ã¯é©åã§ã¯ãããŸããã ç§ã䜿çšããŠããWebã¢ããªã±ãŒã·ã§ã³ã¯ããã®ãããªããšãè©Šã¿ããšãšã©ãŒã³ãŒããè¿ããŸãã
ããã¯ä»åŸããŠãŒã¶ãŒã«ãšã£ãŠåé¡ã«ãªãã®ã§ã¯ãªãããšæããŸãããããã«å¯ŸåŠããåªåããªãããŠããªãããã«æãããçç±ã¯å°ãæ··ä¹±ããŠããŸãã
ïŒ935ãžã®ç§ã®å¿çãåç §ããŠãã ãã
ãããããããšãã 楜ãã¿ã«ããŠããŸãïŒ
@ã«ã«ãµ
_Requestsã¯MIMEã¿ã€ãããµããŒãããããŠãŒã¹ã±ãŒã¹ããµããŒãããŸãã_
multipart/form-data
ããŒã¿ã®éä¿¡ã¯äžè¬çãªäœ¿çšäŸã§ãã
_ïŒ...ïŒJSON圢åŒã®ããŒã¿ã®ã¢ããããŒãã¯éåžžã«äžè¬çã§ãïŒ...ïŒ_
jsonã®éä¿¡ãšmultipart/form-data
éä¿¡ãæ¯èŒããããšã¯ã§ããŸããã jsonã®éä¿¡ã¯ç°¡åã§ãã Content-type
ãèšå®ããçµã¿èŸŒã¿ã¢ãžã¥ãŒã«ã䜿çšããŠ1è¡ã§ããŒã¿ããšã³ã³ãŒãããŸããããã ãã§ãã multipart/form-data
éä¿¡ã¯ããªã¯ãšã¹ãã®æ¬æãç¹å®ã®æ§é ãæã£ãŠããå¿
èŠããããããããè€éã§ãã èšãæããã°ãjsonã®éä¿¡ã¯HTTPã«é¢ããéãééçã§ããã multipart/form-data
éä¿¡ã¯ããã§ã¯ãããŸããã Requestsã¯HTTPã©ã€ãã©ãªã§ããããããã®ãããªæ§é ã®äœæãåŠçããå¿
èŠããããŸãã
_ãã®æ©èœãå®è£ ããããã®çŸããæ¹æ³ãæãä»ãããšãã§ããªãå Žåãããã¯èµ·ãããŸããã_
çŸåšã®files
ãã©ã¡ãŒã¿ã䜿çšããŠmultipart/form-data
ãéä¿¡ããããšã¯ããã¡ã€ã«ãšã¯äœã®é¢ä¿ããããŸãããã決ããŠçŸããã¯ãããŸããïŒéãã§ãïŒããã©ããããããã³ãŒãããŒã¹ã«å
¥ãããšãã§ããŸãã:)ã éããã®ãæãä»ãã®ã¯æ¬åœã«ç°¡åã§ã:)
@ sigmavirus24
_ïŒ...ïŒããããæ¢åã®åäœã¯ååã«ææžåãããŠããŸãã_
æªãAPIããè¯ãAPIãäœãããã¥ã¡ã³ãã¯ãããŸããã APIãåªããŠããã»ã©ãããã¥ã¡ã³ãã¯å°ãªããŠæžã¿ãŸãã
_ããªãã¯ïŒ...ïŒ_ã«äŒŒãäœããããããšãã§ããŸã
ããã§ãããããã¯éåžžã«èª€è§£ãæããçŽæçã§ã¯ãããŸããã 以åã®ã³ã¡ã³ãã§ãããã«files
ãã©ã¡ãŒã¿ã䜿çšããããšã®äœãåé¡ã«ãªã£ãŠããã®ãã説æããŸããã
çµè«ïŒããè¯ããã®ãèãåºãã«ã¯ãçŸåšã®APIãmultipart/form-data
ããŒã¿ã®éä¿¡ã«é¢ããŠæªãããšãèªããå¿
èŠããããŸãã
@spacecase
_ç§ã®èŠ³ç¹ããã¯ããªã¯ãšã¹ãããã§ã«ãã«ãããŒãæçš¿ããµããŒãããŠããããšã¯éåžžã«èç«ãããããšã§ããããã¡ã€ã«ã䜿çšããã«ãŠãŒã¶ãŒãããã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸãã_
åæããŸãããã®ããã第935å·ãäœæããŸããã
ãã®åé¡ã¯è§£æ±ºãããŸããã
@kennethreitzãèš±ããŠãã ãããããã@spacecaseç§ã¯ãã®äŸã®ã©ãã«ããã¡ã€ã«ã䜿çšããŸããã§ããã ç§ã¯filesãã©ã¡ãŒã¿ãŒã䜿çšããŠãããªããæãããšãæ£ç¢ºã«å®è¡ããŸããã 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=
ã®äœ¿çšã«æ³šæããŠãã ããã ããã¯ããã¡ã€ã«ãéä¿¡ãããŠããããšããµãŒããŒã«éç¥ããŠããŸãã Webã¢ããªã§ã¯ããã®èª€ã£ãåäœã§äœæ¥ãããšãšã©ãŒãçºçããŸãã
ç³ãèš³ãããŸããããããããŸãã«ç§ãæãã§ããããšã§ãããšããªããç§ã«èšãã®ã«ãšãŠãå²æ ¢ã§ããããšã¯ç§ãæãããŸãã ç§ã¯ã¢ã€ãã¢ãå©ããæäŸããããã«ãªããŸãããããã®å Žåãããªãã¯æãã§ããªãããã§ãã ããã¯çµæ§ã§ãããç§ã«è©±ããããããŠãããšæããããªãã§ãã ããã
ããŒããç§ã¯ãã®è¡åãééã£ãŠèŠããŠããããã§ãã ç³ãèš³ãããŸããã ããªããæããããã話ããããããããã«æãããããããããšã¯ãç§ã®æå³ã§ã¯ãããŸããã§ããã multipart/form-data
ãåŠçããããã®ããè¯ãæ¹æ³ãå¿
èŠã«ãªãã®ã¯ééããªãååã§ãããä»ã®ãšãããAPIã®ã¢ã€ãã¢ããŸã£ãããšã¬ã¬ã³ãã§ã¯ãªãããšã«åæããŸããã
@ spacecase ïŒ935ãžã®ç§ã®åçãã芧ãã ããã ç©äºã¯è¯ããªãã§ãããã ããªãã®ãã£ãŒãããã¯ã¯éèŠã§ããã倧ãã«æè¬ããŠããŸãã :)
ããªãã®æèŠãéèŠã§ããããšã瀺ããžã§ã¹ãã£ãŒãšããŠã®@spacecaseã¯ãContent-Type
ããããŒãèšå®ããå¿
èŠããããŸãããããã¯ããããªç
©ããããããããŸããã
@ sigmavirus24ã«æè¬ããŸããç§ã¯ãããè©ŠããŠã¿ãŸãã ãããããªãã¯ãããããã«èŠããŸãã
ããªããç§ãæãããã€ããã¯ãªãã£ãããšã«æè¬ããŸãã ç§ã¯ããã«ã€ããŠæ°åãè¯ããªããããªãããããžã§ã¯ãã«å¯ŸããŠäœãããŸããã
ãããäžéšã®äººã«ã¯ã°ãããŠããããã«èŠããã®ã§ãã€ã³ã¿ãŒãããã§æžãããã®ãæŽç·Žããå¿ èŠããããšæããŸãã ç§ã¯ãããç解ããŠããããä»ã®äººãç§ã«åæããŠããŸãããç§ã¯ããã«åãçµãã§ããŸãã ç§ã¯ãæå³ããã«äººã ã«äžå¿«æãäžãããã®ãç解ããã®ã«ååãªå€§ããã®ãµã³ãã«ãµã€ãºãå¿ èŠã ãšæããŸãïŒããã§ãªãæ¹æ³ã§äœããæ©èœããŠããããšãèŠããŠèªåã®å°»ãäœã以å€ã«ïŒã
æçš¿ãããã¡ã€ã«ãšããã€ãã®ããŒå€ããããŸãã ã§ã¯ããã®ãããªmutilpart-formãªã¯ãšã¹ããéä¿¡ããæ£ããæ¹æ³ã¯äœã§ããïŒ ããªããç§ãå©ããŠãããããšãé¡ã£ãŠããŸãã
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)
質åã®ããã®@deerstalkerã¯ãã䜿çšãã ããStackOverflowã®ãã ããããããªãã®è³ªåã«çããããã«ããã®åé¡ã«å¯ŸåŠããããã®ãããžã§ã¯ããé²è¡äžã§ãsigmavirus24 / requests-toolbelt
ãŸããããã§ç¢ºèªã§ããããã«ãStackOverflowã§ä»¥åã«ãã®è³ªåã«åçããããšã«ã泚æããŠãã ããã
ãã¡ã€ã«ãªãã§ãã«ãããŒãæçš¿ãçæãããšããåãåé¡ããããŸãã çŸæç¹ã§ã¯ã requests.post(url, data=data_dict)
ãšrequests.post(url, data=data_dict, files={})
ã©ã¡ããå®è¡ããŠãéãã¯ãããŸããã ãã ãã files
ããŒã¯ãŒãã®ããã©ã«ãã¯None
ã§ããããã2ã€ã®ç°ãªãåäœããšãããšãã§ããã¯ãã§ãã files={}
ãæå®ãããŠããå Žåã¯multipart/form-data
ãæå®ãããŠããªãå Žåã¯application/x-www-form-urlencoded
ã
ç§ã¯äœãèŠèœãšããŠãŸããïŒ
@jwoillezç§ãæçš¿ããã¹ã¿ãã¯ãªãŒããŒãããŒãªã³ã¯ããã©ããŸãããïŒ
ç§ã¯ããæããŸããããããã®ããªãã®çãã¯ã1ã€ã®ãã¡ã€ã«ã§ã®ãã«ãããŒãPOSTãæ±ã£ãŠããŸãã å ã®åé¡ã«æ»ããŸããïŒãã¡ã€ã«ã®ãªããã«ãããŒãPOSTã
ãã¡ã€ã«ãªããžã§ã¯ãã¯æååã«ããããšãã§ããŸãã =ïŒããã¯ããªããæãæ å ±ãããªãã«æäŸããã¯ãã§ãã
ããããç§ãããªãã®ææ¡ã«åŸããªãã°ãç§ã¯ãã®ãããªãã®ã«ãªã£ãŠããŸãããšã¯ãããŸããïŒ
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--
ã¿ãã«ã®ã³ã³ãã³ãã»ã¯ã·ã§ã³ã§ç©ºã®æååã䜿çšããŠã空ã®ã³ã³ãã³ããæäŸã§ããŸãã ãªãã©ã«ã®ç©ºã®ãã¡ã€ã«åãæå®ããããšã¯ã§ããŸããããååšããªããã¡ã€ã«åã¯ãŸã£ããåãæ¹æ³ã§åŠçããå¿ èŠããããŸãã
ããŸããŸãªå¥åŠãªçç±ã§ããããè¡ãå¿
èŠãããå ŽåããããŸãã
APIããã®ãŠãŒã¹ã±ãŒã¹ã«åŒ·åã«æŠè£
ãããã人ã«ã¯ããã®ã¢ãããŒãããå§ãããŸãã
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)
ãŸãã¯ãããŒã«ãã«ãã䜿çšããŠããããã³ã°ã«é Œããªãããã«ããããšãã§ããŸãã