周梦康 发表于 2015-12-09 2982 次浏览 标签 : Java

有用户反馈注册失败,说来惭愧,图方便,注册走的是 get 传参。

监控日志发现有这样一样请求

http://192.168.50.11/?nickname=%3DV%3D

原先的解析类是这样写的

public HttpParams(String url){
    try {
        url = URLDecoder.decode(url, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    if(url.indexOf("?") < 1){
        return ;
    }

    String query[] = url.split("\\?")[1].split("&");

    for(int i = 0;i < query.length; i++){

        if(query[i].indexOf("=") < 1 || query[i].endsWith("=")){
            continue;
        }

        String queryKeyValue[] = query[i].split("=");

        httpQueryMap.put(queryKeyValue[0],queryKeyValue[1]);
    }

    // ...
}

因为我在最开始先做的 decode,这样导致了 url 变成了

http://192.168.50.11/?nickname==V=

这样就获取不到 nickname 的值了。

的确之前考虑的不够周全,还是先切再解析吧。

public HttpParams(String url){

    if(url.indexOf("?") < 1){
        return ;
    }

    String query[] = url.split("\\?")[1].split("&");

    for(int i = 0;i < query.length; i++){

        if(query[i].indexOf("=") < 1 || query[i].endsWith("=")){
            continue;
        }

        String queryKeyValue[] = query[i].split("=");

        try {
            httpQueryMap.put(queryKeyValue[0],URLDecoder.decode(queryKeyValue[1],"UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    // ...

}


评论列表