Android学习笔记 —— 十一 、使用http协议访问网络

1. 使用HttpURLConnection
  1. 获取到HttpURLConnection实例
    一般通过new一个URL对象并传入目标网络地址,然后调用openConnection方法获取到实例
		URL url = new URL("https://www.baidu.com");
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  1. 设置http请求使用的方法 (根据官方文档使用方法似乎发生变化,未实践)
    - GET:表示希望从服务器获得数据connection.setRequestMethod("GET");
    - POST:表示希望提交数据给服务器connection.setRequestMethod("POST");
  • 默认是从服务器获得数据。
  • 如果想要上传数据需要调用connection.setDoOutput(true);配置输出流,然后通过getOutputStream方法获取输出流,接下来书写内容
    官方示例:
   HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
   try {
     urlConnection.setDoOutput(true);
     urlConnection.setChunkedStreamingMode(0);

     OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
     writeStream(out);

     InputStream in = new BufferedInputStream(urlConnection.getInputStream());
     readStream(in);
   } finally {
     urlConnection.disconnect();
   }
  1. 设置连接超时时间、读取超时时间等
		//设置连接超时为x毫秒
		connection.setConnectTimeout(8000);
		//设置读取超时为x毫秒
		connection.setReadTimeout(8000);
  1. 通过getInputStream方法获得输入流,然后读取输入流
InputStream in = connection.getInputStream();
  1. 关闭连接
connection.disconnect();

示例

                HttpURLConnection connection = null;
                BufferedReader reader = null;
                try {
                    //设置http请求目标信息并获取HttpURLConnection实例
                    URL url = new URL("https://www.baidu.com");
                    connection = (HttpURLConnection) url.openConnection();
                    //设置http请求使用的方法为GET(或者是POST)
                    //connection.setRequestMethod("GET");
                    connection.setDoOutput(true);
                    //设置连接超时为x毫秒
                    connection.setConnectTimeout(8000);
                    //设置读取超时为x毫秒
                    connection.setReadTimeout(8000);
                    //通过getInputStream方法获取服务器返回的输入流
                    InputStream in = connection.getInputStream();
                    //读取输入流
                    reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while((line = reader.readLine())!= null){
                        response.append(line);
                    }
                    //使用自定义方法将输入流显示出来
                    showResponse(response.toString());
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    if(reader!=null){
                        try {
                            reader.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if(connection!=null){
                        //关闭连接
                        connection.disconnect();
                    }
                }
2. 使用OkHttp

OkHttp是一个开源的项目,项目主页https://github.com/square/okhttp
使用这个开源项目需要在build.gradle文件中添加implementation(“com.squareup.okhttp3:okhttp:4.2.1”)用于导入需求的包

  1. 获取OkHttpClient实例用于执行request操作
OkHttpClient client = new OkHttpClient();
  1. 构建request,可以通过多种连缀方法丰富这个Request对象
Request request = new Request.Builder()
       .url("http://www.baidu.com")
	   .build();
  1. 调用OkHttpClient的newCall方法创建一个Call对象,然后调用它的execute方法发送请求并获取服务器返回的数据
//使用newCall方法执行request操作,同时使用Response实例存储数据
Response response = client.newCall(request).execute();

关于POST
先构建一个RequestBody对象来存储数据,然后在构建request对象时通过post连缀方法将构建好的RequestBody对象传入,接下来发送请求就会将构建好的数据上传

    //构建RequestBody对象存储要发送的数据
    RequestBody requestBody = new FormBody.Builder()
            .add("name", "admin")
            .add("password", "123456")
            .build();
    //构建request
    Request request = new Request.Builder()
            .url("http://www.baidu.com")
            .post(requestBody)
            .build();

示例

try {
        //获取OkHttpClient实例用于执行request操作
        OkHttpClient client = new OkHttpClient();
        //构建RequestBody对象存储要发送的数据
        RequestBody requestBody = new FormBody.Builder()
        .add("name","admin")
        .add("password","123456")
        .build();
        //构建request
        Request request = new Request.Builder()
        .url("http://www.baidu.com")
        .post(requestBody)
        .build();
        //使用newCall方法执行request操作,同时使用Response实例存储数据
        Response response = client.newCall(request).execute();
        String responseData = response.body().string();
        showResponse(responseData);
} catch (IOException e) {
    e.printStackTrace();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值