zoukankan      html  css  js  c++  java
  • day11

    登录界面的http实现与数据库的交互 包含数据的提交和数据的查询

    package Home.HttpUtil;
    
    import android.util.Log;
    
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Map;
    
    public class HttpUtil {
    
        private static final String TAG ="HttpUtil" ;
    
        public static ByteArrayOutputStream sendPost(String requrl, String reqdata){   //post请求获取二进制流
            HttpURLConnection connection=null;
            try {
                requrl=requrl+"?"+reqdata;
                System.out.println(requrl+"yyyyyy");
                URL url=new URL(requrl);
                connection=(HttpURLConnection)url.openConnection();
                connection.setRequestMethod("POST");
    
    
                connection.setUseCaches(false);
                connection.setConnectTimeout(8000);
                connection.setReadTimeout(8000);
                // 3. 指定content-type -实际上就是指定传输的数据类型
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setRequestProperty("Charset", "utf-8");
    
                // 发送POST请求必须设置如下两行
                connection.setDoInput(true);
                connection.setDoOutput(true);
                // 获取URLConnection对象对应的输出流
    
    
                System.out.println(reqdata+"yyyyyy");
    
                //OutputStream outputStream = connection.getOutputStream();
                //DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                         //outputStream.write(reqdata.getBytes("utf-8"));
                //PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));
                //out.write(reqdata.getBytes());
    
                // flush输出流的缓冲
                         //outputStream.flush();
                         //outputStream.close();
                //out.flush();
                //out.close();
    
                connection.connect();// 建立实际的连接
    
                int respcode=connection.getResponseCode();
                if(respcode==200){
                    InputStream in=connection.getInputStream();
                    byte []buff=new byte[1024];
                    int len=0;
                    ByteArrayOutputStream rs=new ByteArrayOutputStream();
                    while ((len=in.read(buff))!=-1){
                        rs.write(buff,0,len);
                    }
                    in.close();
                    rs.close();
                    connection.disconnect();
                    Log.d(TAG,"请求成功,状态码:"+respcode);
                    return rs;
                }else{
                    Log.d(TAG,"请求错误,状态码:"+respcode);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static String sendPostImg(String actionUrl, Map<String, File> files) throws IOException {
    
            String BOUNDARY = java.util.UUID.randomUUID().toString();   //利用系统工具类生成界限符
            String PREFIX = "--", LINEND = "
    ";
            String MULTIPART_FROM_DATA = "multipart/form-data";
            String CHARSET = "UTF-8";
    
            URL uri = new URL(actionUrl);
            HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
            conn.setReadTimeout(5 * 1000); // 缓存的最长时间
            conn.setDoInput(true);// 允许输入
            conn.setDoOutput(true);// 允许输出
            conn.setUseCaches(false); // 不允许使用缓存
            conn.setRequestMethod("POST");
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
    
            DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
            InputStream in = null;
            // 发送文件数据
            if (files != null)
            {
                for (Map.Entry<String, File> file : files.entrySet())
                {
                    StringBuilder sb1 = new StringBuilder();
                    sb1.append(PREFIX);
                    sb1.append(BOUNDARY);
                    sb1.append(LINEND);
                    // name是post中传参的键 filename是文件的名称
                    sb1.append("Content-Disposition: form-data; name="file"; filename="").append(file.getValue().getName()).append(""").append(LINEND);
                    sb1.append("Content-Type: application/octet-stream; charset=").append(CHARSET).append(LINEND);
                    sb1.append("Content-Transfer-Encoding: binary").append(LINEND);
                    sb1.append(LINEND);
                    outStream.write(sb1.toString().getBytes());
                    InputStream is = new FileInputStream(file.getValue());
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while ((len = is.read(buffer)) != -1)
                    {
                        outStream.write(buffer, 0, len);
                    }
                    is.close();
                    outStream.write(LINEND.getBytes());
                }
    
                // 请求结束标志
                byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
                outStream.write(end_data);
                outStream.flush();
                // 得到响应码
                int res = conn.getResponseCode();
                if (res == 200)
                {
                    Log.d(TAG,"状态码:"+res);
                    in = conn.getInputStream();
                   ByteArrayOutputStream bos=new ByteArrayOutputStream();
                   int l=-1;
                   byte[]buff=new byte[1024];
                   while ((l=in.read(buff))!=-1)
                       bos.write(buff,0,l);
                   bos.close();
                   in.close();
                   outStream.close();
                   conn.disconnect();
                   return new String(bos.toByteArray());
                }else{
                    Log.d(TAG,"状态码:"+res);
                    outStream.close();
                    conn.disconnect();
                }
            }
            return "";
        }
    
    }
    HttpUtil
  • 相关阅读:
    广播BroadcastReceiver(2)
    hunnu11544:小明的烦恼——找字符串
    Systemd启动图形界面过程
    大数据.......
    2014百度之星第一题Energy Conversion
    基于zookeeper简单实现分布式锁
    LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解
    Leetcode
    Linux文件系统(七)---系统调用之open操作(一)
    Go语言Slice操作.
  • 原文地址:https://www.cnblogs.com/chenaiiu/p/13507064.html
Copyright © 2011-2022 走看看