in pkg/profiling/task/network/analyze/layer7/protocols/http1/reader/reader.go [111:150]
func (m *MessageOpt) TransformReadableContent(defaultEncoding string, maxSize int) (string, error) {
contentType := m.Headers().Get("Content-Type")
if contentType == "" {
contentType = fmt.Sprintf("text/html; charset=%s", defaultEncoding)
}
isPlain := strings.HasPrefix(contentType, "text/") || contentType == "application/json"
// header to string
headerBuf, err := io.ReadAll(m.HeaderBuffer())
if err != nil {
return "", err
}
if maxSize > 0 && len(headerBuf) >= maxSize {
return string(headerBuf[:maxSize]), nil
}
headerString := string(headerBuf)
if !isPlain {
return fmt.Sprintf("%s[not plain, current content type: %s]", headerString, contentType), nil
}
// body to string
bodyLength := m.BodyBuffer().Len()
if bodyLength == 0 {
return headerString, nil
}
bodyReader, err := m.buildBodyReader(defaultEncoding)
if err != nil {
return "", err
}
bodyData, err := io.ReadAll(bodyReader)
if err != nil && err != io.ErrUnexpectedEOF {
return "", err
}
resultSize := len(bodyData)
if maxSize > 0 && (resultSize+len(headerString)) > maxSize {
resultSize = maxSize - len(headerString)
}
return fmt.Sprintf("%s%s", headerString, string(bodyData[0:resultSize])), nil
}