HttpURLConnection的post和Get方法

Get方法:

public static void readContentFromGet() throws IOException {
	public static final String GET_URL = "http://localhost:8080/welcome1";
        // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
        String getURL = GET_URL + "?username="+ URLEncoder.encode("fat man", "utf-8");
        URL getUrl = new URL(getURL);
        // 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
        // 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
        HttpURLConnection connection = (HttpURLConnection) getUrl
                .openConnection();
        // 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
        // 服务器
        connection.connect();
        // 取得输入流,并使用Reader读取
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String lines;
        while ((lines = reader.readLine()) != null) {
            System.out.println(lines);
        }
        reader.close();
        // 断开连接
        connection.disconnect();

    }

让我们来回想下POST方法的过程,先看下我们用post上传文件后的结果:

使用HttpURLConnection上传文件非常简单,只要把要上传的数据组装成使用浏览器上传时一模一样的"格式",写到输出流就可以了.以下简单讨论一下使用浏览器上传一个文件时发送的数据的"格式"是怎样的. 
假定我有一个文本文件 test.txt 内容为 

content of test.txt  
  上传时浏览器发送的格式是 

-----------------------------7d65d38307d2  
Content-Disposition: form-data; name="myfile"; filename="E:\badboy\test.txt"  
Content-Type: text/plain  
  
content of test.txt  
-----------------------------7d65d38307d2--  


研究下规律发现有如下几点特征:
1.第一行是“ -----------------------------
7d65d38307d2 ”作为分隔符,然后是“ \r\n ” 回车换行符。 这个7d65d38307d2分隔符浏览器是随机生成的。
2.第二行是Content-Disposition: form-data; name="file2"; filename="E:\badboy\test.txt";name=对应input的name值,filename对应要上传的文件名(包括路径在内)
3.第三行如果是文件就有Content-Type: text/plain;这里上传的是txt文件所以是text/plain,如果上穿的是jpg图片的话就是image/jpg了,可以自己试试看看。
然后就是回车换行符。
4.在下就是文件或参数的内容或值了。如:content of test.txt  
5.最后一行是-----------------------------7d65d38307d2--

public void upload(){  
        List<String> list  = new ArrayList<String>();  //要上传的文件名,如:d:\haha.doc.你要实现自己的业务。我这里就是一个空list.  
        try {  
            String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线  
            URL url = new URL("http://localhost/JobPro/upload.do");  
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
            // 发送POST请求必须设置如下两行  
            conn.setDoOutput(true);  
            conn.setDoInput(true);  
            conn.setUseCaches(false);  
            conn.setRequestMethod("POST");  
            conn.setRequestProperty("connection", "Keep-Alive");  
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");  
            conn.setRequestProperty("Charsert", "UTF-8");   
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);  
              
            OutputStream out = new DataOutputStream(conn.getOutputStream());  //填写数据
            byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线  
            int leng = list.size();  
            for(int i=0;i<leng;i++){  
                String fname = list.get(i);  
                File file = new File(fname);  
                StringBuilder sb = new StringBuilder();    
                sb.append("--");    
                sb.append(BOUNDARY);    
                sb.append("\r\n");    
                sb.append("Content-Disposition: form-data;name=\"file"+i+"\";filename=\""+ file.getName() + "\"\r\n");    
                sb.append("Content-Type:application/octet-stream\r\n\r\n");    
                  
                byte[] data = sb.toString().getBytes();  
                out.write(data);  
                DataInputStream in = new DataInputStream(new FileInputStream(file));  
                int bytes = 0;  
                byte[] bufferOut = new byte[1024];  
                while ((bytes = in.read(bufferOut)) != -1) {  
                    out.write(bufferOut, 0, bytes);  
                }  
                out.write("\r\n".getBytes()); //多个文件时,二个文件之间加入这个  
                in.close();  
            }  
            out.write(end_data);  
            out.flush();    
            out.close();   
              
            // 定义BufferedReader输入流来读取URL的响应  
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
            String line = null;  
            while ((line = reader.readLine()) != null) {  
                System.out.println(line);  
            }  
  
        } catch (Exception e) {  
            System.out.println("发送POST请求出现异常!" + e);  
            e.printStackTrace();  
        }  
    }  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值