참고 :이 질문을받은 시점에서 머리글 만 가져 오는 올바른 방법은 prefetch=False
입니다. 이 옵션의 이름이 stream
으로 바뀌고 부울 값이 반전되므로 stream=True
이 필요합니다.
원래 답변은 다음과 같습니다.
iter_content()
을 사용한 후에는 계속 사용해야합니다. .text
은 간접적으로 후드 아래에서 동일한 인터페이스를 사용합니다 (.content
통해). 파이썬은 3
대안은이 개 요청을하는 것입니다 사용 추정
from requests.compat import chardet
r = requests.get("http://www.december.com/html/demo/hello.html", prefetch=False)
peek = r.iter_content(256).next()
mime = magic.from_buffer(peek, mime=True)
if mime == "text/html":
contents = peek + b''.join(r.iter_content(10 * 1024))
encoding = r.encoding
if encoding is None:
# detect encoding
encoding = chardet.detect(contents)['encoding']
try:
textcontent = str(contents, encoding, errors='replace')
except (LookupError, TypeError):
textcontent = str(contents, errors='replace')
print(textcontent)
: 모든 iter_content()
를 사용하여, 당신은 일 .text
을해야 즉
는 손으로 수행합니다
r = requests.get("http://www.december.com/html/demo/hello.html", prefetch=False)
mime = magic.from_buffer(r.iter_content(256).next(), mime=True)
if mime == "text/html":
print(r.requests.get("http://www.december.com/html/demo/hello.html").text)
파이썬 2 버전 :
r = requests.get("http://www.december.com/html/demo/hello.html", prefetch=False)
peek = r.iter_content(256).next()
mime = magic.from_buffer(peek, mime=True)
if mime == "text/html":
contents = peek + ''.join(r.iter_content(10 * 1024))
encoding = r.encoding
if encoding is None:
# detect encoding
encoding = chardet.detect(contents)['encoding']
try:
textcontent = unicode(contents, encoding, errors='replace')
except (LookupError, TypeError):
textcontent = unicode(contents, errors='replace')
print(textcontent)
감사합니다. – user1415785
안녕하세요, 첫 번째 솔루션을 작동시킬 수 없습니다. "self"에 대한 참조를 "r"로 대체 한 후 "RuntimeError :이 응답의 콘텐츠가 이미 소비되었습니다"라는 오류 메시지가 나타납니다. 어떤 생각? 감사! – user1415785
@ user1415785 : 죄송합니다. 내 실수입니다. 'self.content'를'contents'로 대체했습니다. 이것은'.text' 소스로부터 좀 더 직접적인 번역입니다. –