debug! log method of body response
This commit is contained in:
@@ -3,6 +3,7 @@ use std::str::FromStr;
|
|||||||
use std::{fmt, io::BufRead};
|
use std::{fmt, io::BufRead};
|
||||||
|
|
||||||
use chunked_transfer::Decoder as ChunkDecoder;
|
use chunked_transfer::Decoder as ChunkDecoder;
|
||||||
|
use log::debug;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use crate::body::SizedReader;
|
use crate::body::SizedReader;
|
||||||
@@ -302,25 +303,40 @@ impl Response {
|
|||||||
let buffer_len = inner.buffer().len();
|
let buffer_len = inner.buffer().len();
|
||||||
|
|
||||||
let body_reader: Box<dyn Read + Send + Sync> = match (use_chunked, limit_bytes) {
|
let body_reader: Box<dyn Read + Send + Sync> = match (use_chunked, limit_bytes) {
|
||||||
(true, _) => Box::new(PoolReturnRead::new(
|
// Chunked responses have an unknown length, but do have an end of body
|
||||||
|
// marker. When we encounter the marker, we can return the underlying stream
|
||||||
|
// to the connection pool.
|
||||||
|
(true, _) => {
|
||||||
|
debug!("Chunked body in response");
|
||||||
|
Box::new(PoolReturnRead::new(
|
||||||
&unit.agent,
|
&unit.agent,
|
||||||
&unit.url,
|
&unit.url,
|
||||||
ChunkDecoder::new(stream),
|
ChunkDecoder::new(stream),
|
||||||
)),
|
))
|
||||||
|
}
|
||||||
|
// Responses with a content-length header means we should limit the reading
|
||||||
|
// of the body to the number of bytes in the header. Once done, we can
|
||||||
|
// return the underlying stream to the connection pool.
|
||||||
(false, Some(len)) => {
|
(false, Some(len)) => {
|
||||||
let mut pooler =
|
let mut pooler =
|
||||||
PoolReturnRead::new(&unit.agent, &unit.url, LimitedRead::new(stream, len));
|
PoolReturnRead::new(&unit.agent, &unit.url, LimitedRead::new(stream, len));
|
||||||
|
|
||||||
if len <= buffer_len {
|
if len <= buffer_len {
|
||||||
|
debug!("Body entirely buffered (length: {})", len);
|
||||||
let mut buf = vec![0; len];
|
let mut buf = vec![0; len];
|
||||||
pooler
|
pooler
|
||||||
.read_exact(&mut buf)
|
.read_exact(&mut buf)
|
||||||
.expect("failed to read exact buffer length from stream");
|
.expect("failed to read exact buffer length from stream");
|
||||||
Box::new(Cursor::new(buf))
|
Box::new(Cursor::new(buf))
|
||||||
} else {
|
} else {
|
||||||
|
debug!("Streaming body until content-length: {}", len);
|
||||||
Box::new(pooler)
|
Box::new(pooler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(false, None) => Box::new(stream),
|
(false, None) => {
|
||||||
|
debug!("Body of unknown size - read until socket close");
|
||||||
|
Box::new(stream)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match self.compression {
|
match self.compression {
|
||||||
|
|||||||
Reference in New Issue
Block a user