Ejemplo n.º 1
0
 /**
  * 解码application/x-www-form-urlencoded字符
  *
  * @param content 被编码内容
  * @return 编码后的字符
  */
 public static String decode(String content, String charset) {
   if (StrUtil.isBlank(content)) return content;
   String encodeContnt = null;
   try {
     encodeContnt = URLDecoder.decode(content, charset);
   } catch (UnsupportedEncodingException e) {
     throw new UtilException(StrUtil.format("Unsupported encoding: [{}]", charset), e);
   }
   return encodeContnt;
 }
Ejemplo n.º 2
0
  /**
   * 将URL参数解析为Map(也可以解析Post中的键值对参数)
   *
   * @param paramsStr 参数字符串(或者带参数的Path)
   * @param charset 字符集
   * @return 参数Map
   */
  public static Map<String, List<String>> decodeParams(String paramsStr, String charset) {
    if (StrUtil.isBlank(paramsStr)) {
      return Collections.emptyMap();
    }

    // 去掉Path部分
    int pathEndPos = paramsStr.indexOf('?');
    if (pathEndPos > 0) {
      paramsStr = StrUtil.subSuf(paramsStr, pathEndPos + 1);
    }
    paramsStr = decode(paramsStr, charset);

    final Map<String, List<String>> params = new LinkedHashMap<String, List<String>>();
    String name = null;
    int pos = 0; // 未处理字符开始位置
    int i; // 未处理字符结束位置
    char c; // 当前字符
    for (i = 0; i < paramsStr.length(); i++) {
      c = paramsStr.charAt(i);
      if (c == '=' && name == null) { // 键值对的分界点
        if (pos != i) {
          name = paramsStr.substring(pos, i);
        }
        pos = i + 1;
      } else if (c == '&' || c == ';') { // 参数对的分界点
        if (name == null && pos != i) {
          // 对于像&a&这类无参数值的字符串,我们将name为a的值设为""
          addParam(params, paramsStr.substring(pos, i), StrUtil.EMPTY);
        } else if (name != null) {
          addParam(params, name, paramsStr.substring(pos, i));
          name = null;
        }
        pos = i + 1;
      }
    }

    if (pos != i) {
      if (name == null) {
        addParam(params, paramsStr.substring(pos, i), StrUtil.EMPTY);
      } else {
        addParam(params, name, paramsStr.substring(pos, i));
      }
    } else if (name != null) {
      addParam(params, name, StrUtil.EMPTY);
    }

    return params;
  }
Ejemplo n.º 3
0
  /**
   * 从Http连接的头信息中获得字符集
   *
   * @param conn HTTP连接对象
   * @return 字符集
   */
  public static String getCharset(HttpURLConnection conn) {
    if (conn == null) {
      return null;
    }

    String charset = conn.getContentEncoding();
    if (StrUtil.isBlank(charset)) {
      charset = ReUtil.get(CHARSET_PATTERN, conn.getContentType(), 1);
    }
    return charset;
  }
Ejemplo n.º 4
0
  /**
   * 将表单数据字符串加到URL中(用于GET表单提交)
   *
   * @param url URL
   * @param queryString 表单数据字符串
   * @return 拼接后的字符串
   */
  public static String urlWithForm(String url, String queryString) {
    if (StrUtil.isNotBlank(queryString)) {
      if (url.contains("?")) {
        // 原URL已经带参数
        url += "&" + queryString;
      }
      url += url.endsWith("?") ? queryString : "?" + queryString;
    }

    return url;
  }
Ejemplo n.º 5
0
  /**
   * 从流中读取内容
   *
   * @param in 输入流
   * @param charset 字符集
   * @return 内容
   * @throws IOException
   */
  @SuppressWarnings("resource")
  public static String getString(InputStream in, String charset, boolean isGetCharsetFromContent)
      throws IOException {
    if (false == isGetCharsetFromContent) {
      return IoUtil.read(in, charset);
    }

    StringBuilder content = new StringBuilder(); // 存储返回的内容

    // 从返回的内容中读取所需内容
    BufferedReader reader = IoUtil.getReader(in, charset);
    String line = null;
    while ((line = reader.readLine()) != null) {
      content.append(line).append('\n');
      String charsetInContent = ReUtil.get(CHARSET_PATTERN, line, 1);
      if (StrUtil.isNotBlank(charsetInContent)) {
        charset = charsetInContent;
        reader = IoUtil.getReader(in, charset);
        isGetCharsetFromContent = false;
      }
    }

    return content.toString();
  }
Ejemplo n.º 6
0
 /**
  * 检测给定字符串是否为未知,多用于检测HTTP请求相关<br>
  *
  * @param checkString 被检测的字符串
  * @return 是否未知
  */
 public static boolean isUnknow(String checkString) {
   return StrUtil.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString);
 }