美文网首页
POST和GET上传数据和下载数据

POST和GET上传数据和下载数据

作者: 古拉啦啦 | 来源:发表于2019-08-24 19:04 被阅读0次

    前言:不知不觉,java的学习我们已经接近尾声了,今天我们就以上传数据和下载数据结尾,过了今天我们就进入安卓的开发之旅。

    首先在讲解POST和GET之前,我们先来学习一下 HttpURLConnection,这是一个抽象类,在此之前我们是没有接触过的,所以我觉得在学习向服务器端上传数据下载数据之前,我们必须知道这个抽象类的作用。

    1. URLConnection抽象类

    URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。在很多时候我们要将URLConnection转换为HttpURLConnection,目的是能使用更多的API,如下所示:

    • 1 URL url = new URL("http://192.168.43.32/login.php");
    • 2 URLConnection rulConnection = url.openConnection();
    • 3 /*
      此处的urlConnection对象实际上是根据URL的 请求协议(此处是http)生成的URLConnection类 的子类HttpURLConnection,故此处最好将其转化 为HttpURLConnection类型的对象,以便用到 HttpURLConnection更多的API.如下:
      */
    • 4 HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
    2. HttpURLConnection 的一些方法

    (1) .设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false;

            httpUrlConnection.setDoOutput(true);   
    

    (2). 设置是否从httpUrlConnection读入,默认情况下是true;

            httpUrlConnection.setDoInput(true);   
    

    (3). Post 请求不能使用缓存

        httpUrlConnection.setUseCaches(false);   
    

    (4). 设定请求的方法为"POST",默认是GET

        httpUrlConnection.setRequestMethod("POST");   
    

    (5). 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成,

           httpUrlConnection.connect();  
    
    3. HttpURLConnection连接问题:
           OutputStream outStrm = httpUrlConnection.getOutputStream(); 
    

    这里的getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,个人认为在开发中不调用上述的connect()也可以)。

    4. HttpURLConnection写数据与发送数据问题:

    思路是:


    1. 打开一个URL连接

       URL url = new URL("http://192.168.43.32/login.php");
      

    2 .获取connection对象

      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    
    1. 设置参数

       httpConn.setDoOutput(true);     //需要输出
      httpConn.setDoInput(true);      //需要输入
       httpConn.setUseCaches(false);   //不允许缓存
      
    2. 设置请求方式为post

       connection.setRequestMethod("POST");
      
    3. 准备上传数据

      String data = "yourname= jack&userpassword=123";
      

    6.开始上传 设置输出流,需要上传

     OutputStream os = connection.getOutputStream();
            os.write(data.getBytes());
            os.flush();//表示写完了
    
    1. 接受服务器端返回的数据

      InputStream is = connection.getInputStream();
           byte[] buf = new byte[1024];
           int len;
           while ((len = is.read(buf)) != -1) {
               System.out.println(new String(buf, 0, len));
           }
       }
      

    另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。

    5.URL请求的类别:

    分为二类,GET与POST请求。二者的区别在于:
    a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
    b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
    上面我们讲解了post请求方式,下面我们来看看get 方式:

    一:不带参数的GET请求的步骤:

    1. 打开一个URL 链接
      2.获取与服务器连接的对象
      3.读取下载内容
      源代码如下:

      URL url= new URL("http://192.168.43.32/1.png");
       //获取与服务器连接的对象
       URLConnection connection1 = url.openConnection();
       //读取下载内容
       InputStream fsi=connection1.getInputStream();
      FileInputStream fos = new FileInputStream("C:\\Users\\Administrator\\Desktop\\java\\java\\java1\\src\\main\\java\\day14");
               byte[] buf2 = new byte[1024];
               int len2;
               while ((len2 = fsi.read(buf2)) != -1){
                 System.out.println(new String(buf2,0,len2));
               }
      

    二:带参数的GET请求方式的步骤如下:

    1.打开一个URL 链接

        String path = "http://192.168.43.32/login.php?" + "yourname=1232&user_password=2";
       URL url1 = new URL(path);
    

    2.获取与服务器连接的对象

    URLConnection connection1 = url1.openConnection();
    

    3.设置请求方式,默认是get

    HttpURLConnection httpConnecion = (HttpURLConnection) connection1;
     httpConnecion.setRequestMethod("GET");
    

    4.读取下载内容

       InputStream is1 = httpConnecion.getErrorStream();
            byte[] buf1 = new byte[1024];
            int len1;
            while ((len1 = is1.read(buf1)) !=-1 ){
                System.out.println(new String(buf1,0,len1));
            }
            }
    

    对比:POST和GET的步骤都差不多一样的,设置参数get也可以设置,只是上面我们采用了默认的请求方式,设置输出流,get方式,我们是吧参数放在了url中,所以答题上这些步骤都是一样的。


    时间就是这么快,一个月就过去了,我们java 课程的学习就到此结束了,安卓见!~~~~~~~

    相关文章

      网友评论

          本文标题:POST和GET上传数据和下载数据

          本文链接:https://www.haomeiwen.com/subject/vwfqectx.html