function handleReq(req, data) {
  var method = util.getMethod(data.method || req.method);
  req.method = method;
  req.timeout = parseInt(data.timeout, 10);
  extend(req.headers, data.headers);
  if (typeof data.charset == 'string') {
    var type = req.headers['content-type'];
    var charset = '; charset=' + data.charset;
    if (typeof type == 'string') {
      req.headers['content-type'] = type.split(';')[0] + charset;
    } else {
      req.headers['content-type'] = charset;
    }
  } else {
    delete data.charset;
  }
  if (!util.hasRequestBody(method)) {
    delete data.top;
    delete data.bottom;
    delete data.body;
    delete req.headers['content-length'];
  } else if (data.top || data.bottom || data.body) {
    delete req.headers['content-length'];
  }

  util.isWhistleTransformData(data) && req.addZipTransform(new WhistleTransform(data));
}