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/

xml 复制代码
<application
    android:usesCleartextTraffic="true"
    ... >
    ...
</application>

GET 请求

java 复制代码
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请求

java 复制代码
        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();
            }
        });
相关推荐
PP东3 小时前
ES6学习Generator 函数(生成器)(八)
javascript·学习·es6
小屁不止是运维5 小时前
麒麟操作系统服务架构保姆级教程(二)ssh远程连接
linux·运维·服务器·学习·架构·ssh
follycat6 小时前
bestphp‘s revenge
学习·web安全
职业考试资料墙6 小时前
二级建造师考试题库及答案
学习·考试·题库
Aughts8 小时前
基础电路的学习
学习
岳不谢9 小时前
华为DHCP高级配置学习笔记
网络·笔记·网络协议·学习·华为
爱吃西瓜的小菜鸡10 小时前
【C语言】抽空洗澡
c语言·开发语言·学习·算法
lover_putter12 小时前
ai学习报告:训练
人工智能·学习
123yhy传奇12 小时前
【学习总结|DAY020】Java FIle、字符集、IO流
java·开发语言·学习
eddieHoo14 小时前
关于生活的事
学习