私はdjangoで内部のhttpサービスに接続したいので、内容が非常に大きいので、これらのサービスのhttp応答をバッファリングする必要があります。IterableオブジェクトとDjango StreamingHttpResponse
私のpython 3.6を使用して、2.0ジャンゴ、http.client
次のコードています:、
b''.join(HTTPStreamIterAndClose(serv.connection, res, 200)
、すべてが正常に動作します:
class HTTPStreamIterAndClose():
def __init__(self, conn, res, buffsize):
self.conn = conn
self.res = res
self.buffsize = buffsize
self.length = 1
bytes_length = int(res.getheader('Content-Length'))
if buffsize < bytes_length:
self.length = math.ceil(bytes_length/buffsize)
def __iter__(self):
return self
def __next__(self):
buff = self.res.read(self.buffsize)
if buff is b'':
self.res.close()
self.conn.close()
raise StopIteration
else:
return buff
def __len__(self):
return self.length
def passthru_http_service(request, server, timeout, path):
serv = HTTPService(server, timeout)
res = serv.request(path)
response = StreamingHttpResponse(
HTTPStreamIterAndClose(serv.connection, res, 200),
content_type='application/json'
)
response['Content-Length'] = res.getheader('Content-Length')
return response
そしてREPONSEが空で、私はイテレータをテストしますなぜ動作しているのか分かりません。
ブラウザコンソールにエラーはありますか? – xyres
いいえ、エラーはありません –
「働いていない」とはどういう意味ですか?あなたはhttp 500を取得しますか? 200とブランク出力?あなたの質問に 'curl -v http:// localhost:8000/x/y /'(またはPostmanまたは...)出力を提供してください。 –