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();
            }
        });
相关推荐
边境悍匪6 分钟前
蜗牛学苑 Java 学习 Day23|SpringBoot 思维导图复盘
学习
xx~t17 分钟前
嵌入式学习22
数据结构·学习·算法·排序算法
Linux-lucky9 小时前
21-Linux学习之旅之HTTPS和安全加固
linux·运维·学习·ubuntu·https
学运维的Kysan11 小时前
暑假运维学习打卡第二十六天8.17
学习
dear_bi_MyOnly11 小时前
AI人工智能分类识别——机器如何学习
人工智能·学习·分类
启雀AI14 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
Bruce_Liuxiaowei16 小时前
从零到可运行:基于 Vue3 + FastAPI + DeepSeek-V3 的 AI 英语单词学习系统全栈实战
人工智能·python·学习·fastapi·全栈·智能体
zhangrelay16 小时前
ROS 2 Lyrical 第9章 计算机视觉与摄像头应用
linux·笔记·学习·ubuntu·机器人·ros2
雪的季节17 小时前
OPENCV学习(补充1)
人工智能·opencv·学习
zjnlswd18 小时前
C#学习笔记2 刘铁锰
笔记·学习