HttpURLConnection学习

介绍

  HttpURLConnection类是位于java.net包下继承了URLConnection类的一个抽象类,每个 HttpURLConnection 实例都用于发出单个请求。

URL

  HttpURLConnection的使用需要依赖URL类,URL类位于java.net包下,有很多种构造方法。
在这里插入图片描述

HttpURLConnection

设置网络权限
在AndroidManifest.xml文件的添加<manifest>标签下<uses-permission android:name="android.permission.INTERNET" />
允许通过HTTP访问网络资源
通过修改 AndroidManifest.xml 文件来临时允许明文 HTTP 流量。
可以测试http://www.httpbin.org/get这个网站
测百度https://www.baidu.com/

<application
    android:usesCleartextTraffic="true"
    ... >
    ...
</application>

GET 请求

Button GET = findViewById(R.id.button);
GET.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 指定url
                    String url_baidu = "https://www.baidu.com/";
                    // 创建url对象
                    URL url = new URL(url_baidu);
                    // 创建连接对象
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    // 设置请求方式
                    connection.setRequestMethod("GET");
                    // 建立连接,不发送数据
                    connection.connect();
                    // 获取响应码
                    int responseCode = connection.getResponseCode();
                    if(responseCode == HttpURLConnection.HTTP_OK) {
                        InputStream inputStream = connection.getInputStream();
                        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
                        String inputLine;
                        StringBuilder content = new StringBuilder();
                        while ((inputLine = in.readLine()) != null) {
                            content.append(inputLine);
                        }
                        // 关闭流
                        in.close();
                        
                        // 更新UI,必须在主线程
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Log.d("Response:", content.toString());
                                // 你也可以用Toast显示结果
                                // Toast.makeText(getApplicationContext(), content.toString(), Toast.LENGTH_LONG).show();
                            }
                        });
                    } else {
                        Log.d("Response:", "Request failed with code: " + responseCode);
                    }
                    connection.disconnect();
                } catch (Exception e) {
                    // 记录异常
                    Log.e("Error", "Exception: " + e.getMessage(), e);
                }
            }
        }).start();
    }
});

POST请求

        Button POST = findViewById(R.id.button2);
        POST.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            String url_example = "https://www.httpbin.org/forms/post";
                            URL url = new URL(url_example);
                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                            connection.setRequestMethod("POST");
                            connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
                            connection.setDoOutput(true);
                            connection.setDoInput(true);

                            String postData = "comments=555&custemail=111@111&custname=111&custtel=111&delivery=&size=small&topping=cheese&topping=onion";

                            OutputStream outputStream = connection.getOutputStream();
                            outputStream.write(postData.getBytes(StandardCharsets.UTF_8));
                            outputStream.flush();
                            outputStream.close();

                            int responseCode = connection.getResponseCode();
                            if(responseCode==HttpURLConnection.HTTP_OK){
                                InputStream inputStream = connection.getInputStream();
                                BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
                                String inputLine;
                                StringBuilder content = new StringBuilder();
                                while ((inputLine=in.readLine())!=null){
                                    content.append(inputLine);
                                }
                                in.close();

                                Log.d("Response",content.toString());

                            }
                            else{
                                Log.d("Response:","Request failed with code: " + responseCode);
                            }

                            connection.connect();
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }
                }).start();
            }
        });
HttpURLConnection是Java中用于进行HTTP网络访问的类。它提供了一种简单而灵活的方式来与服务器进行通信,并获取服务器返回的数据。使用HttpURLConnection可以发送GET和POST请求,以及设置请求头和请求参数等。 通过使用HttpURLConnection,我们可以实现以下功能: 1. 建立连接并发送GET请求: ```java URL url = new URL("http://ip地址:端口/资源地址"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); ``` 2. 获取服务器返回的结果: ```java InputStream inputStream = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); connection.disconnect(); String result = response.toString(); ``` 3. 发送POST请求: ```java URL url = new URL("http://ip地址:端口/资源地址"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write("参数".getBytes()); outputStream.flush(); outputStream.close(); ``` 4. 设置请求头: ```java connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Authorization", "Bearer token"); ``` 5. 设置请求参数: ```java String params = "key1=value1&key2=value2"; OutputStream outputStream = connection.getOutputStream(); outputStream.write(params.getBytes()); outputStream.flush(); outputStream.close(); ``` 通过学习和使用HttpURLConnection,我们可以轻松地进行网络访问,并获取服务器返回的数据,从而实现与服务器的交互和数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值