今天根据测试需要.使用java模拟http请求,访问web服务,并传参数.看似简单的问题,却因字符问题卡了一下!故有必要记录一下
问题描述:java模拟http测试中在请求的参数中带有+(加号),请求指定url,后台收到的参数总是异常,而在浏览器中却正常
开始以为是一大串字符中可能没有trim() 或去除一些特殊字符.尝试后均失败.没办法只能笨方法对比一下 浏览器访问和JAVA模拟访问 WEB收到的参数对比一下.
原来+变成空格.
后来灵机一动.想到URLEncoder.encode(String s, String enc),专门用来于url打交道的..果不其然....顺便来段部分代码
URL url = new URL(urlStr); URLConnection connection = url.openConnection(); //重要.需要编码,防止特殊字符 String key = URLEncoder.encode(m.get("xxx")+"", "utf-8") +"".trim(); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 发送POST请求必须设置如下两行 connection.setDoOutput(true); connection.setDoInput(true); out = new PrintWriter(connection.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); connection.connect();
如果要获取HTTP交互结果可以参考下面的
inputStream = connection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader);