예제 #1
0
파일: HTTPUtil.java 프로젝트: denuno/Lucee4
  public static URI toURI(String strUrl, int port) throws URISyntaxException {

    // print.o((strUrl));
    URI uri = new URI(strUrl);

    String host = uri.getHost();
    String fragment = uri.getRawFragment();
    String path = uri.getRawPath();
    String query = uri.getRawQuery();

    String scheme = uri.getScheme();
    String userInfo = uri.getRawUserInfo();
    if (port <= 0) port = uri.getPort();

    // decode path
    if (!StringUtil.isEmpty(path)) {

      int sqIndex = path.indexOf(';');
      String q = null;
      if (sqIndex != -1) {
        q = path.substring(sqIndex + 1);
        path = path.substring(0, sqIndex);
      }

      StringBuilder res = new StringBuilder();

      StringList list = ListUtil.toListTrim(path, '/');
      String str;

      while (list.hasNext()) {
        str = list.next();
        // str=URLDecoder.decode(str);

        if (StringUtil.isEmpty(str)) continue;
        res.append("/");
        res.append(escapeQSValue(str));
      }
      if (StringUtil.endsWith(path, '/')) res.append('/');
      path = res.toString();

      if (sqIndex != -1) {
        path += decodeQuery(q, ';');
      }
    }

    // decode query
    query = decodeQuery(query, '?');

    // decode ref/anchor
    if (!StringUtil.isEmpty(fragment)) {
      fragment = escapeQSValue(fragment);
    }

    // user/pasword
    if (!StringUtil.isEmpty(userInfo)) {
      int index = userInfo.indexOf(':');
      if (index != -1) {
        userInfo =
            escapeQSValue(userInfo.substring(0, index))
                + ":"
                + escapeQSValue(userInfo.substring(index + 1));
      } else userInfo = escapeQSValue(userInfo);
    }

    /*print.o("- fragment:"+fragment);
    print.o("- host:"+host);
    print.o("- path:"+path);
    print.o("- query:"+query);
    print.o("- scheme:"+scheme);
    print.o("- userInfo:"+userInfo);
    print.o("- port:"+port);
    print.o("- absolute:"+uri.isAbsolute());
    print.o("- opaque:"+uri.isOpaque());*/

    StringBuilder rtn = new StringBuilder();
    if (scheme != null) {
      rtn.append(scheme);
      rtn.append("://");
    }
    if (userInfo != null) {
      rtn.append(userInfo);
      rtn.append("@");
    }
    if (host != null) {
      rtn.append(host);
    }
    if (port > 0) {
      rtn.append(":");
      rtn.append(port);
    }
    if (path != null) {
      rtn.append(path);
    }
    if (query != null) {
      // rtn.append("?");
      rtn.append(query);
    }
    if (fragment != null) {
      rtn.append("#");
      rtn.append(fragment);
    }

    return new URI(rtn.toString());
  }
예제 #2
0
파일: HTTPUtil.java 프로젝트: denuno/Lucee4
  public static URL encodeURL(URL url, int port) throws MalformedURLException {

    // file
    String path = url.getPath();
    // String file=url.getFile();
    String query = url.getQuery();
    String ref = url.getRef();
    String user = url.getUserInfo();
    if (port <= 0) port = url.getPort();

    // decode path
    if (!StringUtil.isEmpty(path)) {
      int sqIndex = path.indexOf(';');
      String q = null;
      if (sqIndex != -1) {
        q = path.substring(sqIndex + 1);
        path = path.substring(0, sqIndex);
      }

      StringBuilder res = new StringBuilder();

      StringList list = ListUtil.toListTrim(path, '/');
      String str;

      while (list.hasNext()) {
        str = list.next();
        // str=URLDecoder.decode(str);

        if (StringUtil.isEmpty(str)) continue;
        res.append("/");
        res.append(escapeQSValue(str));
      }
      if (StringUtil.endsWith(path, '/')) res.append('/');
      path = res.toString();

      if (sqIndex != -1) {
        path += decodeQuery(q, ';');
      }
    }

    // decode query
    query = decodeQuery(query, '?');

    String file = path + query;

    // decode ref/anchor
    if (ref != null) {
      file += "#" + escapeQSValue(ref);
    }

    // user/pasword
    if (!StringUtil.isEmpty(user)) {
      int index = user.indexOf(':');
      if (index != -1) {
        user =
            escapeQSValue(user.substring(0, index))
                + ":"
                + escapeQSValue(user.substring(index + 1));
      } else user = escapeQSValue(user);

      String strUrl = getProtocol(url) + "://" + user + "@" + url.getHost();
      if (port > 0) strUrl += ":" + port;
      strUrl += file;
      return new URL(strUrl);
    }

    // port
    if (port <= 0) return new URL(url.getProtocol(), url.getHost(), file);
    return new URL(url.getProtocol(), url.getHost(), port, file);
  }