通过java模拟发送post数据

public static String sendPost(String url, List<PostValue> parameters) { 
        String result = "";// 返回的结果 
        BufferedReader in = null;// 读取响应输入流 
        PrintWriter out = null; 
        StringBuffer sb = new StringBuffer();// 处理请求参数 
        String params = "";// 编码之后的参数 
        try { 
            // 编码请求参数 
            if(parameters.size() == 1){
                for(PostValue p:parameters){
                    sb.append(p.getKey()).append("=").append(p.getValue());
                }
                params = sb.toString(); 
            }else{
                for(PostValue p:parameters){
                    sb.append(p.getKey()).append("=").append(p.getValue()).append("&");
                }
                String temp_params = sb.toString(); 
                params = temp_params.substring(0, temp_params.length() - 1); 
            }
            // 创建URL对象 
            java.net.URL connURL = new java.net.URL(url); 
            // 打开URL连接 
            java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL 
                    .openConnection(); 
            // 设置通用属性 
            httpConn.setRequestProperty("Accept", "*/*"); 
            httpConn.setRequestProperty("Connection", "Keep-Alive"); 
            httpConn.setRequestProperty("User-Agent", 
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 
            httpConn.setRequestProperty("Accept-Charset", "GBK");
            httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=gbk");
            // 设置POST方式 
            httpConn.setDoInput(true); 
            httpConn.setDoOutput(true); 
            // 获取HttpURLConnection对象对应的输出流 
            out = new PrintWriter(httpConn.getOutputStream()); 
            // 发送请求参数 
            out.write(params); 
            // flush输出流的缓冲 
            out.flush(); 
            // 定义BufferedReader输入流来读取URL的响应,设置编码方式 
            in = new BufferedReader(new InputStreamReader(httpConn 
                    .getInputStream(), "GBK")); 
            String line; 
            // 读取返回的内容 
            while ((line = in.readLine()) != null) { 
                result += line+"\r\n"; 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try { 
                if (out != null) { 
                    out.close(); 
                } 
                if (in != null) { 
                    in.close(); 
                } 
            } catch (IOException ex) { 
                ex.printStackTrace(); 
            } 
        } 
        return result; 
    }  

 如果没有设置

 httpConn.setRequestProperty("Accept-Charset", "GBK");
            httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=gbk");

  的话,那么

out = new PrintWriter(httpConn.getOutputStream()); 提交到服务器端是以iso-8859-1的数据编码格式传递过去的
那么我们只能通过new String(value.getBytes("iso-8859-1"),"gbk")来的到正确的数据内容

猜你喜欢

转载自cainwise.iteye.com/blog/1155669
今日推荐