zoukankan      html  css  js  c++  java
  • 对请求链接的URLEncode处理

      不能直接对URL整体处理,因为?、&、=都会被编码掉(Python可以直接处理),以下为处理的代码

    public class MyURLEncoding {
        public static void main(String[] args) throws Exception {
            String str = "http://www.baidu.com?wd=中国&language=简体汉语&size=Song14";
            String result = GetRealUrl(str);
            System.out.println(result);
        }
    
        //对url中的参数进行url编码
        public static String GetRealUrl(String str) {
            try {
                int index = str.indexOf("?");
                if (index < 0) return str;
                String query = str.substring(0, index);
                String params = str.substring(index + 1);
                Map map = GetArgs(params);
                String encodeParams = TransMapToString(map);
                return query + "?" + encodeParams;
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
            return "";
        }
    
        //将url参数格式转化为map
        public static Map GetArgs(String params) throws Exception {
            Map map = new HashMap();
            String[] pairs = params.split("&");
            for (int i = 0; i < pairs.length; i++) {
                int pos = pairs[i].indexOf("=");
                if (pos == -1) continue;
                String argname = pairs[i].substring(0, pos);
                String value = pairs[i].substring(pos + 1);
                value = URLEncoder.encode(value, "utf-8");
                map.put(argname, value);
            }
            return map;
        }
    
        //将map转化为指定的String类型
        public static String TransMapToString(Map map) {
            java.util.Map.Entry entry;
            StringBuffer sb = new StringBuffer();
            for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); ) {
                entry = (java.util.Map.Entry) iterator.next();
                sb.append(entry.getKey().toString()).append("=").append(null == entry.getValue() ? "" :
                        entry.getValue().toString()).append(iterator.hasNext() ? "&" : "");
            }
            return sb.toString();
        }
    
        //将String类型按一定规则转换为Map
        public static Map TransStringToMap(String mapString) {
            Map map = new HashMap();
            java.util.StringTokenizer items;
            for (StringTokenizer entrys = new StringTokenizer(mapString, "&"); entrys.hasMoreTokens();
                 map.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null))
                items = new StringTokenizer(entrys.nextToken(), "=");
            return map;
        }
    }
  • 相关阅读:
    python使用adb获取Android Phone截图(解决Windows传输编码导致png文件损坏的问题)
    opencv使用总结
    OC对象之旅 weak弱引用实现分析
    React Native 出现红屏幕报连接服务失败
    升级Xcode或 MacOS编译iOS出现resource fork, Finder information, or similar detritus not allowed
    iOS keychain入门
    iOS CoreData 开发之数据模型关系
    iOS CoreData 开发
    iOS 从xib中加载自定义视图
    团队分数分配
  • 原文地址:https://www.cnblogs.com/hucheng1997/p/11040178.html
Copyright © 2011-2022 走看看