code: def read_request_from_str(data, **params):
      
      method, uri = None, None
      headers = {}
      host = ''
  
      try:
          split_list = data.split('\n\n')
          headers_text = split_list[0]
          body = '\n\n'.join(split_list[1:])
      except:
          headers_text = data
          body = ''
  
      body = force_bytes(body)
      for k, v in params.items():
          body = body.replace(b'{%s}' % force_bytes(k), force_bytes(v))
  
      header_list = headers_text.split('\n')
  
      for i, line in enumerate(header_list):
          line = line.strip()
          if line.strip() == '':
              continue
  
          line = line.format(**params)
          if i == 0:
              # 至多3个
              split_line = line.strip().split(' ')
              method, uri, _ = split_line[0], ' '.join(split_line[1:-1]), split_line[-1]
          else:
              # 至多2个
              header, value = line.split(':', 1)
              header = header.strip()
              value = value.strip()
              headers[header] = value
              if header.lower() == 'host':
                  host = value
  
      return headers, method, uri, host, body
docs: 从字符串中读取请求头，并根据格式化字符串模板，进行字符串格式化
      :param data:
      :param params:
      :return: