zoukankan      html  css  js  c++  java
  • Java 利用HttpURLConnection发送http请求

    写了一个简单的 Http 请求的Class,实现了 get, post ,postfile 

    package com.asus.uts.util;
    
    
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    /**
     * Created by jiezhou on 16/2/22.
     */
    public class HttpHelper {
        public  static void main(String[] args) throws JSONException{
            JSONObject json = new JSONObject();
            json.put("un", "bruce");
            json.put("pwd", "123456");
    
            //get
            request r = get("http://127.0.0.1:5000/index/user/1/m", json);
            System.out.println(r.status_code);
            System.out.println(r.text);
    
            //post json data
            String s = "{'sex': 'm', 'name': '', 'id': 1}";
            JSONObject json2 = new JSONObject(s);
         request r2 = post("http://127.0.0.1:5000/index/user/1/m", json2);
            //post File
            String path = "/Users/jiezhou/Documents/test.py";
            postFile("http://127.0.0.1:5000/fileupload", "temp.txt", "/Users/jiezhou/Documents/temp.txt");
    
        }
    
        /**
         * 请求返回的对象
         * @author jiezhou
         *
         */
        public static class request{
            //状态码
            public int status_code;
            //返回数据
            public String text;
        }
    
        private HttpHelper(){
    
        }
    
        /**
         * 从服务器get 数据
         * @param getUrl     URL地址
         * @param params	 JSONObject类型的数据格式
         * @return request
         */
        public static request get(String getUrl, JSONObject params){
            request r = new request();
            HttpURLConnection conn = null;
            try {
                //拼接参数
                if (params != null) {
                    String per = null;
                    for (int i=0; i< params.names().length(); i++){
                        per = i == 0? "?" : "&";
                        getUrl += per + params.names().get(i).toString() + "=" + params.get(params.names().get(i).toString());
                    }
                }
    
                URL url = new URL(getUrl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setReadTimeout(5000);
                conn.setConnectTimeout(10000);
    
                int status_code =  conn.getResponseCode();
                r.status_code = status_code;
                if (status_code == 200){
                    InputStream is = conn.getInputStream();
                    r.text = getStringFromInputStream(is);
                }
            } catch (Exception e) {
    
            }
            return r;
        }
    
        /**
         * post 数据
         * @param getUrl    URL地址
         * @param params	JSONObject类型的数据格式
         * @return request
         */
        public static request post(String getUrl, JSONObject params){
            request r = new request();
            HttpURLConnection conn = null;
            try {
                URL url = new URL(getUrl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setReadTimeout(5000);
                conn.setConnectTimeout(10000);
                conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容
    
                // post请求的参数
                String data = null;
                //拼接参数
                if (params != null) {
                    data = params.toString();
                }
    
                // 获得一个输出流,向服务器写数据,默认情况下,系统不允许向服务器输出内容
                OutputStream out = conn.getOutputStream();// 获得一个输出流,向服务器写数据
                out.write(data.getBytes());
                out.flush();
                out.close();
    
                int status_code =  conn.getResponseCode();
                r.status_code = status_code;
                if (status_code == 200){
                    InputStream is = conn.getInputStream();
                    r.text = getStringFromInputStream(is);
    
                }
            } catch (Exception e) {
                System.out.println(e.getMessage().toString());
            }
            return r;
        }
    
        /**
         * post上传文件
         * @param getUrl        url 地址
         * @param fileName		文件名
         * @param filePath		文件路径
         * @return request
         */
        public static request postFile(String getUrl, String fileName, String filePath){
            request r = new request();
            HttpURLConnection conn = null;
            try {
                String end = "
    ";
                String twoHyphens = "--";
                String boundary = "******"; // 定义数据分隔线
                URL url = new URL(getUrl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setReadTimeout(5000);
                conn.setConnectTimeout(10000);
                conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
                // post请求的参数
                DataOutputStream ds = new DataOutputStream(conn.getOutputStream());
                ds.writeBytes(twoHyphens + boundary + end);
                ds.writeBytes("Content-Disposition: form-data; "
                        + "name="file";filename="" + fileName + """ + end);
                ds.writeBytes(end);
                /* 取得文件的FileInputStream */
                FileInputStream fStream = new FileInputStream(filePath);
                /* 设置每次写入1024bytes */
                int bufferSize = 1024;
                byte[] buffer = new byte[bufferSize];
                int length = -1;
                /* 从文件读取数据至缓冲区 */
                while ((length = fStream.read(buffer)) != -1) {
                  /* 将资料写入DataOutputStream中 */
                    ds.write(buffer, 0, length);
                }
                ds.writeBytes(end);
                ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
                /* close streams */
                fStream.close();
                ds.flush();
    
                int status_code =  conn.getResponseCode();
                r.status_code = status_code;
                if (status_code == 200){
                    InputStream is = conn.getInputStream();
                    r.text = getStringFromInputStream(is);
    
                }
            } catch (Exception e) {
                System.out.println(e.getMessage().toString());
            }
            return r;
        }
        /**
         * 装换InputStream
         * @param is
         * @return
         * @throws IOException
         */
        private static String getStringFromInputStream(InputStream is) throws IOException {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            // 模板代码 必须熟练
            byte[] buffer = new byte[1024];
            int len = -1;
            // 一定要写len=is.read(buffer)
            // 如果while((is.read(buffer))!=-1)则无法将数据写入buffer中
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            is.close();
            String state = os.toString();// 把流中的数据转换成字符串,采用的编码是utf-8(模拟器默认编码)
            os.close();
            return state;
        }
    }
    

      

  • 相关阅读:
    嵌入式为什么要用Linux操作系统
    SPI 协议的理解
    跳转某指定地址、给某绝对地址赋值
    define 宏定义
    笔试--编程题
    spring 技巧集锦
    spring data jpa auditing
    spring security
    Python基础笔记
    调试EF源代码环境配置
  • 原文地址:https://www.cnblogs.com/zj1111184556/p/5353875.html
Copyright © 2011-2022 走看看