您的位置:首页 > 理论基础 > 计算机网络

HttpUrlConnection网络连接

2015-08-12 20:37 405 查看
  首先我们要了解的是HttpUrlConnection是由Sun公司封装好的网络连接,通过其中的Get和Post方法来获得客户端和服务器提供的数据。

  我们要知道,获得数据的方法有两种,分别是doGet方法doPost方法。首先我们要了解两种该方法的区别。

Get方法

  通过Get方法向服务器提供数据是将数据加在url后面的。提供数据的方式是显式的。

Post方法

  通过Post向服务器提供数据的方式是隐式的,将数据通过
getOutputStream().write(byte[] array)
的方法传送给服务器。

  下面来总结一下通过Sun公司封装的HttpUrlConnection给服务器传送数据的步骤。

doGet

定义url字符串。

即:将要访问的服务器网址定义为一个字符串,并在字符串的最后加“?”然后加上要传入的数据。

生成URL 。

将定义的字符串生成一个URL类的对象。

打开URL连接 并将其强制造型成HttpUrlConnection类型的对象。

通过URL与服务器建立连接。并将连接强制转换为HttpUrlConnection类型。

设置请求方式。

设置请求方式为”GET“类型,

设置编码类型。

设置接受的数据类型。
httpurlconn.setRequestProperty("Accept-Charset", "utf-8");


设置可以接受的序列化的java对象。
httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");


设置超时时间

由于服务器响应时间可能过长,所以可以设置超时时间。

获取状态码。

如果状态码为200,则表明可以正常访问服务器。

获取读取的数据

整体的代码如下:

String urlString = "http://localhost:8080/MyServerletTest/MyServerletTest?username=xiaohua&password=12345";
                try {
                    //定义URL
                    URL url = new URL(urlString);
                    //打开URL连接
                    URLConnection conn =  url.openConnection();
                    //强制转换为HTTPUrlConnection类型
                    HttpURLConnection httpurlconn = (HttpURLConnection) conn;
                    //设置请求方式
                    httpurlconn.setRequestMethod("GET");

                    //设置连接超时时间
                    httpurlconn.setReadTimeout(3000);

                    //设置编码格式
                    //设置接受的数据类型
                    httpurlconn.setRequestProperty("Accept-Charset", "utf-8");
                    //设置可以序列化的java对象
                    httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");
                    int code = httpurlconn.getResponseCode();
                    System.out.println("获得的状态码是:"+code);
                    if(code==HttpsURLConnection.HTTP_OK){
                        InputStream is = httpurlconn.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        String line = br.readLine();
                        while(line != null){
                            System.out.println(line);
                            line = br.readLine();
                        }               
                    }

                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                } catch(SocketTimeoutException e2){
                    System.out.println("网络连接超时!请重新请求或者关闭!啊哈哈哈哈……");
                }catch (IOException e3) {
                }


doPost

定义url字符串。

即:将要访问的服务器网址定义为一个字符串.

生成URL 。

将定义的字符串生成一个URL类的对象。

打开URL连接 并将其强制造型成HttpUrlConnection类型的对象。

通过URL与服务器建立连接。并将连接强制转换为HttpUrlConnection类型。

设置请求方式。

设置请求方式为”POST“类型,

设置编码类型。 设置接受的数据类型。
httpurlconn.setRequestProperty("Accept-Charset", "utf-8");
设置可以接受的序列化的java对象。
httpurlconn.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");


设置相关参数

 设置可以读取服务器返回的内容。因为默认为true,因此可以不写。

 设置客户端可以给用户提交数据。默认为false,
setDoOutput(true);
必须设置!!!!

 设置服务器不允许读缓存!
setUseCaches(false);


设置参数
String param = “提交的数据内容”;


提交数据getOutputStream().write(byte[] array);

设置超时时间

由于服务器响应时间可能过长,所以可以设置超时时间。

获取状态码。

如果状态码为200,则表明可以正常访问服务器。

获取读取的数据

整体的代码如下:

String urlString  = "http://localhost:8080/MyServerletTest/MyServerletTest";
    try {
            URL url = new URL(urlString);
            HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

            //设置请求方式
            httpConnection.setRequestMethod("POST");
            //设置超时时间
            httpConnection.setReadTimeout(2000);

            //设置编码格式
            //设置接受的数据类型
            httpConnection.setRequestProperty("Accept-Charset", "utf-8");
            //设置可以序列化的java对象
            httpConnection.setRequestProperty("Context-Type", "application/x-www-form-urlencoded");

            // 设置可以读取服务器返回的内容
            //httpConnection.setDoInput(true);
            //设置服务器接收客户端串入的内容。
            httpConnection.setDoOutput(true);
            //设置不可已接受缓存内容。
            httpConnection.setUseCaches(false);
            //设置传入的参数内容
            String params = "username=zhangsan&password=123456";
            //提交数据
            httpConnection.getOutputStream().write(params.getBytes());

            int code = httpConnection.getResponseCode();
            if(code==HttpURLConnection.HTTP_OK){
                System.out.println("获得的连接状态码是:"+code);

                //从服务器读数据
                InputStream is = httpConnection.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String line = br.readLine();
                while(line!=null){
                    System.out.println(line);
                    line = br.readLine();       
                }
            }                   
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: