저는 스트리밍 방식으로 데이터를 검색하고 처리하기위한 매우 간단한 proof-of-concept을 개발하려고합니다. 내가 요청한 서버는 청크로 데이터를 보낼 것이지만, 청크를 반복 할 때 httplib
을 사용하는 데 문제가 있습니다.httplib.HTTPResponse의 데이터를 반복 할 수 있습니까?
def getData(src):
d = src.read(1024)
while d and len(d) > 0:
yield d
d = src.read(1024)
if __name__ == "__main__":
con = httplib.HTTPSConnection('example.com', port='8443', cert_file='...', key_file='...')
con.putrequest('GET', '/path/to/resource')
response = con.getresponse()
for s in getData(response):
print s
raw_input() # Just to give me a moment to examine each packet
매우 간단 수입 HTTPLIB을 :
는 여기에 내가 노력하고있어입니다. 서버에 대한 HTTPS 연결을 열고 리소스를 요청한 다음 한 번에 1024 바이트 씩 결과를 가져옵니다. 확실히 HTTPS 연결을 성공적으로 만들고있어 문제가되지 않습니다.
그러나 내가 찾는 것은 src.read(1024)
에 대한 호출이 매번 같은 것을 반환한다는 것입니다. 응답의 처음 1024 바이트 만 반환하며 파일 내에서 커서를 추적하지 않습니다.
한 번에 1024 바이트를 어떻게 받겠습니까? read()
에 관한 문서는 꽤 희소합니다. urllib 또는 urllib2 사용에 대해 생각해 보았지만 둘 다 HTTPS 연결을 만들 수없는 것 같습니다.
HTTPS가 필요합니다. Requests과 같은 패키지가 내 손을 잡기가 다소 어려운 제한된 회사 환경에서 작업하고 있습니다. 가능하다면 Python의 표준 lib 디렉토리에서 해결책을 찾고 싶습니다.
는 // 큰 오래 된 지방 편집
내가 단순히 d
변수를 업데이트 깜빡했던 내 원래의 코드에서 밝혀졌습니다. yield
루프 외부에서 읽음으로 초기화하고 루프에서 변경하지 않았습니다. 일단 거기에 다시 추가하면 완벽하게 작동합니다.
그래서 간단히 말해서, 나는 아주 바보예요.
, 당신은 HTTPSHandler 보았다 :
여기에 나를 위해 작업 버전 대신 요청()를 사용하여,입니까? 'opener = urllib2.OpenerDirector() opener.add_handler (urllib2.HTTPSHandler())' – Hut8
아무것도 돌려 보내지 않으려면 putrequest() 뒤에 con.send()가 필요합니다. 샘플 반복기는 HTTPConnection 객체에서 작동합니다. – tdelaney
@tdelaney'con.send()'없이 데이터를 다시 얻었습니다. 올바른 데이터입니다. 그러나 처음 1024 비트 만 가져옵니다. 나는 con.putrequest() 다음에'con.send ("")'를 추가하려고 시도했지만 나는 여전히 같은 결과를 얻고있다. –