diff --git a/retrieval/target.go b/retrieval/target.go index 92815b35c9..c3354b2a6a 100644 --- a/retrieval/target.go +++ b/retrieval/target.go @@ -10,9 +10,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + package retrieval import ( + "bytes" "fmt" "log" "net/http" @@ -236,7 +238,15 @@ func (t *target) scrape(timestamp time.Time, results chan<- *extraction.Result) BaseLabels: baseLabels, } - return processor.ProcessSingle(resp.Body, results, processOptions) + // N.B. - It is explicitly required to extract the entire payload before + // attempting to deserialize, as the underlying reader expects will + // interpret pending data as a truncated message. + buf := new(bytes.Buffer) + if _, err := buf.ReadFrom(resp.Body); err != nil { + return err + } + + return processor.ProcessSingle(buf, results, processOptions) } func (t target) State() TargetState {