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 = "\r\n";
        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

 

posted @ 2020-08-14 23:37  晨起  阅读(99)  评论(0编辑  收藏  举报