ããã¥ã¡ã³ãã«ãããšãå¿çã®å
容ãèªã¿åãã«ã¯ã .text
ã .content
ãããã³.raw
3ã€ã®æ¹æ³ããããŸãã æåã®2ã€ã¯ã転éãšã³ã³ãŒãã£ã³ã°ãèæ
®ããã¡ã¢ãªå
ã®çµæãçæãããšãã«ã¹ããªãŒã ãèªåçã«è§£åããŸãã ãã ããç¹ã«çµæã倧ããå ŽåãçŸåšã解åãããçµæããã¡ã€ã«ã®ãããªãªããžã§ã¯ãã®åœ¢åŒã§ååŸããç°¡åãªæ¹æ³ã¯ãããŸãããããšãã°ãXMLãŸãã¯JsonããŒãµãŒã«çŽæ¥æž¡ãããšãã§ããŸãã
HTTPãªã¯ãšã¹ãããŠãŒã¶ãŒãã¬ã³ããªãŒã«ããããšãç®çãšããã©ã€ãã©ãªã®èŠ³ç¹ããããªããŠãŒã¶ãŒã¯WebãµãŒããŒãšã©ã€ãã©ãªã®éã§å
éšçã«ããŽã·ãšãŒããããã¹ããªãŒã ã®å§çž®ã¿ã€ããšåããããäœã¬ãã«ã®ãã®ãæ°ã«ããå¿
èŠãããã®ã§ããããã çµå±ã®ãšãããããã©ã«ãã§ãã®ãããªã¹ããªãŒã ãåãå
¥ããå Žåãããã¯ã©ã€ãã©ãªã®ãé害ãã§ãã ãã®èŠ³ç¹ããã .raw
ã¹ããªãŒã ã¯ãç§ã®å¥œã¿ã«ã¯å°ãçãããŸãã
ãã¶ã.stream
ãããª4çªç®ã®ããããã£ã¯ããè¯ãæœè±¡åã¬ãã«ãæäŸãããããããŸãããïŒ
Response.iter_content
ããŒãšããããããã¯ã€ãã¬ãŒã¿ã§ãã ç§ã¯ãã¡ã€ã«ã®ãããªãªããžã§ã¯ããã€ãŸãããã¥ã¡ã³ãããã»ããµãçŽæ¥èªã¿åãããšãã§ãããªããžã§ã¯ããæ±ããŠããŸããã
iter_content
ã䜿çšããŠãã¡ã€ã«ã®ãããªãªããžã§ã¯ããäœæããã®ã¯éåžžã«ç°¡åã§ãã
ãšããã§ãè¿ éãªè¿ä¿¡ãããããšãã
åæããŸãã ããã§ãã requests
ããã®æ©èœãæäŸããã®ã¯ããã«ç°¡åã§ãã ç§ã®ãã€ã³ãã¯ã .raw
ã¯ã転éã¬ãã«ã®è©³çŽ°ãå
¬éãããããã¹ããªãŒã ããèªã¿åãããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã«ãšã£ãŠééã£ãã¬ãã«ã®æœè±¡åã§ãããšããããšã§ãã
å人çã«ã¯ãHTTPãªã¯ãšã¹ãã®çµæã1è¡ãã€ããŸãã¯ãã£ã³ã¯ããšã«ç¹°ãè¿ãäž»ãªãŠãŒã¹ã±ãŒã¹ã¯èŠåœãããŸãããããã¡ã€ã«ã®ãããªãªããžã§ã¯ããç¹ã«å¿ç圢åŒãšããŠè§£æããäž»ãªãŠãŒã¹ã±ãŒã¹ã¯ããã€ãèŠãããŸãã HTMLãXMLãJsonãªã©ã®ããã¥ã¡ã³ãããŒãµãŒãå¿ èŠã§ãã
ãŸããã€ãã¬ãŒã¿ãã©ãããããã¡ã€ã«ã®ãããªãªããžã§ã¯ããããããã¡ã€ã«ã®ãããªãªããžã§ã¯ããã©ããããã€ãã¬ãŒã¿ãäœæããæ¹ãã¯ããã«ç°¡åã§ããããšã«æ³šæããŠãã ããã
ç§ã¯æ¬¡ã®ã³ãŒããæãã€ããã å¿ èŠãªãã¹ãŠã®ã±ãŒã¹ãåŠçããŸãããããªãè€éã ãšæããŸãã ã ããç§ã¯å³æžé€šã®äžéšãšããŠãã®ãããªãã®ã欲ãããšèšã£ãã®ã§ãã ãŠãŒã¶ãŒã¯ãããèªåã§ç解ããå¿ èŠã¯ãããŸããã
requestã®models.pyå ã®ã³ãŒãã¯ãããã§ééã£ãæœè±¡åã䜿çšããŠãããšæããŸãã å埩äžã§ã¯ãªããå埩æ©æ§ã§éå§ããåã«ãçã®ã¹ããªãŒã ã解åããå¿ èŠããããŸãã ãã¡ã€ã«ã®ãããªãã®ããã€ãã¬ãŒã¿ã«ç§»åããŠãã¡ã€ã«ã®ãããªãã®ã«æ»ãã®ã¯ããŸã£ããã°ãããŠããŸãã åäžã®APIå€æã§ååã§ãããã»ãšãã©ã®ãŠãŒã¶ãŒã¯ãšã«ããã³ã³ãã³ãã€ãã¬ãŒã¿ãŒãæ°ã«ããŸããã
class FileLikeDecompressor(object):
"""
File-like object that wraps and decompresses an HTTP stream transparently.
"""
def __init__(self, stream, mode='gzip'):
self.stream = stream
zlib_mode = 16 + zlib.MAX_WBITS if mode == 'gzip' else -zlib.MAX_WBITS # magic
self.dec = zlib.decompressobj(zlib_mode)
self.data = ''
def read(self, n=None):
if self.dec is None:
return '' # all done
if n is None:
data = self.data + self.dec.decompress(self.stream.read())
self.data = self.dec = None
return data
while len(self.data) < n:
new_data = self.stream.read(n)
self.data += self.dec.decompress(new_data)
if not new_data:
self.dec = None
break
if self.data:
data, self.data = self.data[:n], self.data[n:]
return data
return ''
def decompressed(response):
"""
Return a file-like object that represents the uncompressed HTTP response data.
For compressed HTTP responses, wraps the stream in a FileLikeDecompressor.
"""
stream = response.raw
mode = response.headers.get('content-encoding')
if mode in ('gzip', 'deflate'):
return FileLikeDecompressor(stream, mode)
return stream
ææ¡ã©ããã content_iter
ãããã¡ã€ã«ã®ãããªãªããžã§ã¯ããäœæããŠã¿ãŸãããã ããã¯æ¬¡ã®ããã«ãªããŸãã
class FileLikeFromIter(object):
def __init__(self, content_iter):
self.iter = content_iter
self.data = ''
def __iter__(self):
return self.iter
def read(self, n=None):
if n is None:
return self.data + '\n'.join(l for l in self.iter)
else:
while len(self.data) < n:
try:
self.data = '\n'.join((self.data, self.iter.next()))
except StopIteration:
break
result, self.data = self.data[:n], self.data[n:]
return result
ç§ã®ã³ã¡ã³ããç¹ã«ç§ãæçš¿ããã³ãŒãã®åã®æ®µèœãããäžåºŠèªã¿ãããšæããããããŸããã
ã¯ãããã ãããã®ãœãªã¥ãŒã·ã§ã³ã¯ãã§ã«ãªã¯ãšã¹ãã«çµã¿èŸŒãŸããŠããããã2çªç®ã®å Žæã§è§£åãå®è¡ãããããã¯ãªãŒã³ã§ãïŒIMOãç°¡åã§ãïŒã
ããããç§ã¯äžè¬çã«ããªãã«åæããŸãã r.file
ïŒãŸãã¯ãã®ãããªãã®ïŒã«ã¯ã r.raw
ãããã¯ããã«å€ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãã ã§ããããããããªã¯ãšã¹ãã«å«ããŠã»ããã§ãã @kennethreitz
ãresponse.streamãã¯ç§ã«ã¯è¯ãååã®ããã«èãããŸãã
ãããresponse.rawã®ç®çã§ã:)
ãããèŠãŠçŽæçã«æã£ãã®ãããã§ããã ãããããã®åŸãresponse.rawãå£ããŠããããšã«æ°ä»ããŸãããããã¯ããŠãŒã¶ãŒãæ°ã«ããå¿ èŠã®ãªããåºç€ãšãªããã©ã³ã¹ããŒãå±€ã®å éšã®è©³çŽ°ãå ¬éããŠããããã§ãã
圌ããå¿
èŠãšããå¯äžã®æ¹æ³ã¯raw.read
ïŒ
ããã§ããããã ããraw.readïŒïŒã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®å éšããŽã·ãšãŒã·ã§ã³ã«å¿ããŠåäœãç°ãªããŸãã æåŸ ãããããŒã¿ãè¿ãããšãããã°ã裞ã®å§çž®ãã€ããè¿ãããšããããŸãã
åºæ¬çã«ã response.raw
ã¯ãã»ãšãã©ã®ãŠãŒã¶ãŒãåãã§ç¡èŠããäžéšã®ãã¯ãŒãŠãŒã¶ãŒã圹ç«ã€ãšæããã䟿å©ãªæ©èœã§ãããå§çž®ã«äŸåããªãresponse.stream
ã¯ãã»ãšãã©ã®ã¹ããªãŒãã³ã°ãŠãŒã¶ãŒãè¡ãæ©èœã§ãã欲ããã§ãã
+1
+1
ãã®èšèšäžã®ãã°ã¯ä¿®æ£ãããŸããïŒ
ãã®æ¹æ³ãã©ãã»ã©æ£ãããå¹ççãã¯ããããŸããããç§ã«ãšã£ãŠã¯ã次ã®ããã«æ©èœããŸãã
>>> import lxml # a parser that scorns encoding
>>> unicode_response_string = response.text
>>> lxml.etree.XML(bytes(bytearray(unicode_response_string, encoding='utf-8'))) # provided unicode() means utf-8
<Element html at 0x105364870>
@kernc ïŒããã¯å¥åŠãªããšã§ãã response.content
ã¯ãã§ã«ãã€ãæååã§ãããããããã§è¡ã£ãŠããã®ã¯ãPythonãéžæããå°çã®ã³ãŒããã¯ã§ã³ã³ãã³ãããã³ãŒãããŠãããutf-8ãšããŠåãšã³ã³ãŒãããããšã§ãã
ããã¯ãã°ã§ã¯ãªããããªããææ¡ãããã°ã§ã¯ãããŸããã ãã¡ã€ã«ã®ãããªãªããžã§ã¯ããæ¬åœã«å¿ èŠãªå Žåã¯ãStringIOãšBytesIOããå§ãããŸãã
@Lukasaã¯æ£ããã§ãã content
ã¯åžžã«ãã€ãæååã§ããå¿
èŠããããŸãïŒPython3ã§ã¯æ瀺çãªãã€ãæååã§ããPython2ã§ã¯str ==ãã€ãã§ãïŒã ãã€ãã¹ããªã³ã°ã§ã¯ãªãå¯äžã®ã¢ã€ãã ã¯text
ã§ãã
@kennethreitzããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ ããã¯ããªãæ·±å»ãªèšèšäžã®ãã°ã§ãããæ©æã«è§£æ±ºããã®ãæåã§ãã ãããåé¿ããããã«æžãããã³ãŒããå€ããã°å€ãã»ã©ãããã¯èª°ã«ãšã£ãŠãã³ã¹ããããããŸãã
ããã¯èšèšäžã®ãã°ã§ã¯ãªããåãªãæ©èœã®èŠæ±ã§ãã ãããŠããªã¯ãšã¹ãã«ã¯æ©èœã®ããªãŒãºãããã®ã§ãããã¯ããã«ãªã¯ãšã¹ãã«å«ãŸããªããšæããŸãïŒããããã°ïŒ...
é·å¹Žã®èšèšãã°ãå宣èšããããšã¯ãæ¬ ããŠããæ©èœãã§ã¯ãªããšæããŸã
ç°¡åã«æ¶ããŠããŸããŸãã èè
ãèããŠãããšèããŸãã
Pythonstdlibã®äžéšãšããŠããªã¯ãšã¹ãããäœæããŸãã ããã¯è¯ãããšã§ã
ãããä¿®æ£ããæ©äŒã
èè ãèããŠãããšèããŸãã
Pythonstdlibã®äžéšãšããŠããªã¯ãšã¹ãããäœæããŸãã
å®éã«ã¯ããã§ã¯ãããŸããïŒ httpïŒ //docs.python-requests.org/en/latest/dev/philosophy/#standard -library
ããã¯ãã°ã§ã¯ãªããæ©èœã®ãªã¯ãšã¹ãã§ãã ãªã¯ãšã¹ãã¯äœãæªãããšãããŠããŸãããããã¯åã«ãªãã·ã§ã³ã®äœããããŠããŸããã ããããŸãã«æ©èœã®å®çŸ©ã§ãã
ããã«ãstdlibã®æºåã¯ãRequestsãæ©èœããªãŒãºã«ãªã£ãŠããçç±ã§ãã Requestsãstdlibã«å ¥ããšãã¿ã€ã ãªãŒãªãã°ä¿®æ£ãè¡ãããšãéåžžã«å°é£ã«ãªããŸãã ãã®çµæãæ°æ©èœãè¿œå ãããšãã°ããªã°ã¬ãã·ã§ã³ã®åäœãè¿œå ãããå Žåãstdlibã®ããŒãžã§ã³ã¯æ¬¡ã®ãã€ããŒãªãªãŒã¹ãŸã§ä¿®æ£ã§ããŸããã ããã¯æªãããšã§ãã
Marc Schlaichã19.03.2013 08:41ïŒ
èè ãèããŠãããšèããŸãã
Pythonstdlibã®äžéšãšããŠããªã¯ãšã¹ãããäœæããŸããå®éã«ã¯ããã§ã¯ãããŸããïŒ httpïŒ //docs.python-requests.org/en/latest/dev/philosophy/#standard -library
ç§ã¯ããã§ãããèªã¿ãŸããïŒ
ã¹ããã¡ã³
ãããæ©èœèŠæ±ã§ã¯ãªãèšèšäžã®ãã°ã§ããçç±ã«ã€ããŠã¯ãã§ã«èª¬æããŸãããæ¢åã®APIã¯ééã£ãæœè±¡åã䜿çšããæ¥ç¶ã®ããŽã·ãšãŒã·ã§ã³ã®è©³çŽ°ããªã¢ãŒããµã€ãã«ç¿»åŒããããŠãŒã¶ãŒã¹ããŒã¹ã«ãªãŒã¯ããããããŠãŒã¶ãŒã¯ãã¹ãã§ã¯ãããŸãããæ°ã«ããå¿ èŠããããŸãã ãã®ãããçŸåšã®çã®ã¹ããªãŒã èªã¿åããµããŒãã¯äœ¿ãã«ãããªã£ãŠããŸãã åºæ¬çã«ãããã¯å£ããæ©èœãä¿®æ£ããããã®ãªã¯ãšã¹ãã§ãããæ°ããæ©èœã®ãªã¯ãšã¹ãã§ã¯ãããŸããã
ããããããã«èŠçŽããŸãããã ãã°ã¯ãçã®ã¹ããªãŒã èªã¿åãæ©èœãå®éã«äœ¿çšããå Žåãã¯ã©ã€ã¢ã³ããå§çž®ãèš±å¯ãããšããã«ãã©ã€ãã©ãªã®äžéšãç¹ã«æ¡ä»¶ä»ãã¹ããªãŒã 解åéšåå šäœãåå®è£ ããå¿ èŠãããããšã§ããããããªããšæ©èœã¯åœ¹ã«ç«ããªãããã§ãã ããã§ã¯ãããªã¯ãšã¹ããã§ãã§ã«ååšããã³ãŒãã«ã€ããŠè©±ããŸããããã¯ãééã£ãå Žæã§äœ¿çšãããŠããã ãã§ãã ãµãŒããŒãacceptããããŒãå°éãããã©ãããã¯ã©ã€ã¢ã³ããå¶åŸ¡ã§ããªããããæªå å·¥ã®èªã¿åãã¬ãã«ããäžã§äœ¿çšããå¿ èŠããããŸãã å§çž®ã¯ãé¢é£ããããããŒãæå¹ã«ãããŠãŒã¶ãŒãå·ã€ãããã®ã§ã¯ãªããæ¥ç¶ã®ééçãªããŽã·ãšãŒã·ã§ã³ã®è©³çŽ°ã§ããå¿ èŠããããŸãã
ãµãŒããŒãã¯ã©ã€ã¢ã³ãã®åžæãåãã§ç¡èŠã§ãããããç¹ã«ã¹ããªãŒã ãå®éã«å§çž®ããããã©ãããäºæž¬ã§ããªãå Žåãã¯ã©ã€ã¢ã³ããå§çž®ã¹ããªãŒã ã«é¢å¿ãæã€ãŠãŒã¹ã±ãŒã¹ã¯èããããŸããã ããã¯çŽç²ãªäº€æžã®è©³çŽ°ã§ãã ãã®ãããçã®ã¹ããªãŒã ã®èªã¿åãã§ã¯ãæãäžè¬çãªãŠãŒã¹ã±ãŒã¹ãããéåžžã«ããããããªããŠãŒã¹ã±ãŒã¹ãåªå ããããšã§ãééã£ãæœè±¡åã䜿çšããŸãã
ç§ã¯ã§ããã ããšãã°ã倧ããªããã¹ãããŒã¹ã®ãã¡ã€ã«ãããŠã³ããŒãããŠããŠããããå§çž®ãããŸãŸã«ããŠããããå Žåã¯ã©ãã§ããããã ãã®å€æŽããå ã å§çž®ãããããŒã¿ããã£ã¹ã¯ã«ä¿åããæ¹æ³ããªããšããã¿ã€ãã«ã®æ°ãããèšèšãã°ãã§ãã©ããŒã¢ããããããšãã§ããŸãã
ãã®ã¢ã€ãã¢ã¯æå³çã«é³è ã§æãã§ãããç§ã¯ãã€ã³ãã説æããããšããŠããŸããããã¯ããªã¯ãšã¹ãããã¹ãŠã®äººã«åœŒããæãçžäºäœçšã¡ã«ããºã ãæ£ç¢ºã«æäŸãã矩åã¯ãªããšããããšã§ãã å®éãããããããšã¯ããªã¯ãšã¹ããæã€äž»ãªç®æšã§ããAPIã®åçŽãã«çŽæ¥åããããšã«ãªããŸãã æçšãªæ©èœãè¿œå ããã«ãããããããAPIãè€éã«ããããã«å察ãããããªã¯ãšã¹ãã«å¯Ÿããææ¡ãããå€æŽã®é·ããé·ãã_é·ã_ãªã¹ãããããŸãã Requestsã¯ããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã§urllib2ã眮ãæããããšãç®çãšããŠããããæãäžè¬çãªã±ãŒã¹ãåçŽåããããšãç®çãšããŠããŸãã
ãã®å ŽåãRequestsã¯ãã»ãšãã©ã®ãŠãŒã¶ãŒããã¡ã€ã«ã®ãããªãªããžã§ã¯ããæãŸãªããšæ³å®ããŠããããã次ã®çžäºäœçšãææ¡ããŸãã
Response.text
ããã³Response.content
ïŒãã¹ãŠã®ããŒã¿ãäžåºŠã«ååŸããå¿
èŠããããŸããResponse.iter_lines()
ããã³Response.iter_content()
ïŒäžåºŠã«ãã¹ãŠã®ããŒã¿ãå¿
èŠã«ãªãããã§ã¯ãããŸãããResponse.raw
ïŒä»ã®2ã€ã®ãªãã·ã§ã³ã«æºè¶³ããŠããªãã®ã§ãèªåã§è¡ã£ãŠãã ããããããã¯ããªã¯ãšã¹ãã®äžè¬çãªäœ¿çšæ³ãå§åçã«è¡šãããã«éžæãããŸããã ãã»ãšãã©ã®ãŠãŒã¶ãŒã¯ãšã«ããã³ã³ãã³ãã€ãã¬ãŒã¿ãæ°ã«ããªãããšããªãã¯èšããŸããããããŠã response.stream
ã¯ã»ãšãã©ã®ã¹ããªãŒãã³ã°ãŠãŒã¶ãŒãæãæ©èœã§ããã ãã®ãããžã§ã¯ãã®çµéšãããç§ã¯æèŠãåãããŸããéåžžã«å€ãã®äººãã³ã³ãã³ãã€ãã¬ãŒã¿ã䜿çšããŠããããã¡ã€ã«ã®ãããªãªããžã§ã¯ããå¿
æ»ã«æãã§ãã人ã¯å€ããããŸããã
æåŸã®ãã€ã³ãïŒå§çž®ãæ¥ç¶ã®ééçãªããŽã·ãšãŒã·ã§ã³ã®è©³çŽ°ã§ããå¿ èŠãããå Žåã¯ãæ¥ç¶ããžãã¯ãåŠçããurllib3ã«å¯ŸããŠé©åãªãã°ãçºçãããå¿ èŠããããŸãã
ãªã¯ãšã¹ãããŠãŒã¹ã±ãŒã¹ã«äžé©åã§ãããšæãããããšããè©«ã³ç³ãäžããŸãã
response.raw
ã¯çŸåšã®å®è£
ã§ã¯å£ããŠãããéšåçã«ãåæããŠãããšã®ããšã§ãïŒå°ãªããšããããããŒã解æããã«å§çž®ã®è©³çŽ°ãååŸã§ããã¯ãã§ãïŒã
ãã ããããªãã®ææ¡ã¯ãŸã æ©èœèŠæ±ã§ã...
@ã«ã«ãµ
urllib3ã«å¯ŸããŠãã°ãå ±åãããšãå°ãªããšããã¹ãŠãåç¬ã§ã§ã¯ãªãããªã¯ãšã¹ãã®APIãã©ã®ããã«ä¿®æ£ããããã¯ããããŸããã
ãããŠãç§ã¯ããªãã®ããŠãŒã¹ã±ãŒã¹ããèæ¡ãããŠããããšã«åæããŸãã ç§ãèšã£ãããã«ãã¯ã©ã€ã¢ã³ãããµãŒããŒåŽã§å§çž®ãç©æ¥µçã«å¶åŸ¡ã§ããªãå ŽåïŒãããŠãããç¡å¹ã«ãããã確å®ã«æå¹ã«ããªãå ŽåïŒãå§çž®ãã¡ã€ã«ããã£ã¹ã¯ã«ä¿åã§ããããã«ããããã«ã¯ã©ã€ã¢ã³ãã«äŸåããããšã¯ããŸããããã»ã©èå³æ·±ãããšã§ã¯ãããŸããã
@schlamar
ç§ã¯ããããã®ããã«èªããããšã«åæããŸãã ç§ã¯ãã®åé¡ã解決ãããã®ãªãäœã§ã倧äžå€«ã ãšããªãã«ä¿èšŒããŸãã ããã«ãã©ãçãããã«æ°ãããã±ãããéãå¿
èŠãããå Žåã¯ãããããŠãã ããã
ããã«ãã©ãçãããã«æ°ãããã±ãããéãå¿ èŠãããå Žåã¯ãããããŠãã ããã
æ©èœãããªãŒãºãããããã±ãã¹ã¯ãããæåŠãããšæããŸãã
ç§ã¯ãã®åé¡ã解決ãããã®ãªãäœã§ã倧äžå€«ã§ã
iter_content
ããã¡ã€ã«ã®ãããªãªããžã§ã¯ããšããŠã©ããããã- ããããŒã解æããå¿ èŠã«å¿ããŠ
response.raw
ã解åããŸã
äž¡æ¹ã®è§£æ±ºçã¯äžèšã®ã³ã¡ã³ãã«ãããåŸè ã¯ããªããæçš¿ãããã®ã§ãã ãããçŽæ¥ãªã¯ãšã¹ãã«å«ãŸããªãã®ã¯ãªãã§ããïŒ
ããã§100ïŒ æ確ã«ããŸããããåºæ¬çã«ãæ©èœãããªãŒãºããŠããéã¯ãããããªã¯ãšã¹ãã«å«ãŸããå¯èœæ§ã¯ãããŸããã å£ããŠãããã®ã¯ãããŸãããAPIã¯ããŒãºã«å®å šã§ã¯ãããŸããã äœãå£ããŠããªãã®ã§ãéèŠãªã®ã¯ã±ãã¹ããããæãã§ãããã©ããã ãã§ãã èŠæ±ã¯æ°äž»äž»çŸ©ã§ã¯ãªããäžäººäžç¥šã§ãã ã±ãã¹ã¯ç·ã§ãã圌ã¯æ祚暩ãæã£ãŠããŸãã ã±ãã¹ã¯8ãæåã«ãã®åé¡ãéããã®ã§ã圌ããããæãŸãªãããšã¯ããªãæãããªããã§ãã
urllib3ã«å¯ŸããŠãã°ãå ±åãããšãå°ãªããšããã¹ãŠãåç¬ã§ã§ã¯ãªãããªã¯ãšã¹ãã®APIãã©ã®ããã«ä¿®æ£ããããã¯ããããŸããã
åžžã«éå§çž®ã®ãã¡ã€ã«ãªããžã§ã¯ããè¿ãããã«urllib3ã«ããããé©çšãããšããããèªåçã«è§£æ±ºããå¿ èŠããããŸãïŒãããè¯ãèãã§ãããšã¯èšããŸããïŒã
ãããããããœãªã¥ãŒã·ã§ã³çªå·3ïŒãã¹ããããŠããªãïŒã§ãïŒ
response.raw.read = functools.partial(response.raw.read, decode_content=True)
https://github.com/shazow/urllib3/blob/master/urllib3/response.py#L112ãåç §ããŠ
ããããã-ãããä»ãŸã§ã«ååšããããšãç§ã¯ç¥ããŸããã§ããã ããã«ãããæ©èœã®ã©ãããã¯ããã«ç°¡åã«ãªããŸãã
ããããããã¯å®éã«æ©èœããŸããïŒ ã€ãŸãããã³ã³ãã¬ããµã¯ã¹ããŒããã«ã§ã€ã³ã¯ãªã¡ã³ã¿ã«ã§ããïŒ ããšãã°ãreadïŒ123ïŒã2ååŒã³åºããšãgzipãã¡ã€ã«ã®æå¹ãªéå§ãè¿ãããªããªããŸãã
ããããããã¯å®éã«æ©èœããŸããïŒ ã€ãŸãããã³ã³ãã¬ããµã¯ã¹ããŒããã«ã§ã€ã³ã¯ãªã¡ã³ã¿ã«ã§ããïŒ
ãããããã§ã¯ãªãããã§ãã ç§ã¯docstringãèªãã§ããŸããã§ããã
ããããããã«ç§ã®ææ¡ããããŸãïŒ
HTTPResponse.read
ãamt
ããã³decode_content
ãšåæã«æ©èœããããã«urllib3ã«ããããé©çšããŸããread
ã¡ãœããã«ããããé©çšãã代ããã«response.raw.decode_content = True
å®è¡ã§ããŸãïŒãiter_content
decode_content=True
ã䜿çšããŠããªã¯ãšã¹ãã®è§£åãå®å
šã«åé€ããŸã@Lukasaããã¯æ©èœã®ããªãŒãºã«éåããªããšæããŸãããïŒ
@schlamar ïŒååãšããŠã確ãã«ã APIãå€æŽãããŠããªãéããå éšã®å€æŽã¯åé¡ãªãã¯ãã§ããããã¯+1ã«ãªããŸãã ãã ããç§ã¯BDFLã§ã¯ãªãããšã«æ³šæããŠãã ãã=ïŒ
ãªã¯ãšã¹ãã®stream_decompress
ã¯ãšã«ããå£ããŠããŸãïŒïŒ1249
+1
æãåèã«ãªãã³ã¡ã³ã
ãããæ©èœèŠæ±ã§ã¯ãªãèšèšäžã®ãã°ã§ããçç±ã«ã€ããŠã¯ãã§ã«èª¬æããŸãããæ¢åã®APIã¯ééã£ãæœè±¡åã䜿çšããæ¥ç¶ã®ããŽã·ãšãŒã·ã§ã³ã®è©³çŽ°ããªã¢ãŒããµã€ãã«ç¿»åŒããããŠãŒã¶ãŒã¹ããŒã¹ã«ãªãŒã¯ããããããŠãŒã¶ãŒã¯ãã¹ãã§ã¯ãããŸãããæ°ã«ããå¿ èŠããããŸãã ãã®ãããçŸåšã®çã®ã¹ããªãŒã èªã¿åããµããŒãã¯äœ¿ãã«ãããªã£ãŠããŸãã åºæ¬çã«ãããã¯å£ããæ©èœãä¿®æ£ããããã®ãªã¯ãšã¹ãã§ãããæ°ããæ©èœã®ãªã¯ãšã¹ãã§ã¯ãããŸããã