美文网首页
封装HTTP请求

封装HTTP请求

作者: 勤学奋进小郎君 | 来源:发表于2018-10-10 22:03 被阅读0次

每次访问网址,需要配置网络连接的很多属性(e.i. 请求方法、连接超时时间、读取资源超时时间等),很麻烦,所以这里为了简化访问网址的过程,封装一个http请求的工具类

HttpUtil.java

需要注意的几个点

  • HTTP连接是耗时操作,不能在UI主线程中执行 要在子线程中来进行
public class HttpUtil {

    //声明一个发起HTTP请求的方法
    public static void sendRequest(final String url){

        //开启子线程执行费事操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //要访问的网址对象
                    URL tagetUrl = new URL(url);
                    //打开连接通道,连接到远程网址对象
                    //然后将连接通道强制转化成HTTP协议
                    HttpURLConnection httpconnection = (HttpURLConnection) tagetUrl.openConnection();
                    //访问方法GET请求
                    httpconnection.setRequestMethod("GET");
                    //连接超时的时间
                    httpconnection.setConnectTimeout(10000);
                    //读取资源超时时间
                    httpconnection.setReadTimeout(10000);
                    //获取远程访问网址的资源的输入流对象
                    InputStream in =  httpconnection.getInputStream();
                    //读取输入流数据
                    //InputStreamReader: 将二进制数据转换成字符数据
                    //BufferedReader: 将字符数据转化成文本数据
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                    //不断的将BufferedReader对象中将数据写入字符串对象中
                    String tmpstring;
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((tmpstring = bufferedReader.readLine()) != null){
                        stringBuilder.append(tmpstring);
                    }
                    Log.e("数据", stringBuilder.toString());

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        
    }
}

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //简单的访问网站
        new HttpUtil().sendRequest("http://360.net/");
    }
  • 线程内部不能使用return来返回 所以需要使用java回调
    callbackfuc.java
public interface callbackfuc {
     void onFinish(String string);
     void onError(String string);
}

``

public class HttpUtil {

    //声明一个发起HTTP请求的方法
    public static void sendRequest(final String url, final callbackfuc callbackfucer){

        //开启子线程执行费事操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //要访问的网址对象
                    URL tagetUrl = new URL(url);
                    //打开连接通道,连接到远程网址对象
                    //然后将连接通道强制转化成HTTP协议
                    HttpURLConnection httpconnection = (HttpURLConnection) tagetUrl.openConnection();
                    //访问方法GET请求
                    httpconnection.setRequestMethod("GET");
                    //连接超时的时间
                    httpconnection.setConnectTimeout(10000);
                    //读取资源超时时间
                    httpconnection.setReadTimeout(10000);
                    //获取远程访问网址的资源的输入流对象
                    InputStream in =  httpconnection.getInputStream();
                    //读取输入流数据
                    //InputStreamReader: 将二进制数据转换成字符数据
                    //BufferedReader: 将字符数据转化成文本数据
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
                    //不断的将BufferedReader对象中将数据写入字符串对象中
                    String tmpstring;
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((tmpstring = bufferedReader.readLine()) != null){
                        stringBuilder.append(tmpstring);
                    }
                    Log.e("数据", stringBuilder.toString());
                    //是否传入这个接口对象
                    if (callbackfucer != null){
                        //将相应数据作为参数传给回调函数
                        callbackfucer.onFinish(stringBuilder.toString());
                        Log.e("ONfinish", stringBuilder.toString())
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HttpUtil.sendRequest("http://www.80la.cc/", new callbackfuc() {
            //在回调函数这里自定义处理相应数据
            @Override
            public void onFinish(String string) {
            }
            @Override
            public void onError(String string) {
            }
        });

    }

相关文章

  • springcloud ribbon 的简单使用

    RestTemplate 对http请求通信的封装,封装了http请求,方便的请求http接口。 Ribbon r...

  • 封装HTTP请求

    每次访问网址,需要配置网络连接的很多属性(e.i. 请求方法、连接超时时间、读取资源超时时间等),很麻烦,所以这里...

  • 封装http请求

    import 'package:dio/dio.dart'; import 'dart:async'; impor...

  • HTTP 请求封装

    前言 我们在做项目的时候经常需要用到HTTP请求,但是org.apache.http.client不满足HTTPS...

  • JavaEE-HttpServletRequest总结

    HttpServletRequest: 封装了Http请求内容(请求行, 请求头, 请求体) 1.HTTP请求行和...

  • Koa(五、源码浅析)

    基础http请求 针对http基础请求简单封装 效果上面两者相同,下面继续封装 js的getter和setter ...

  • curl发送请求方法封装request

    //使用url封装请求方法 //封装可以请求http和https //可以发送get和post的请求方式 func...

  • TCP/HTTP/Socket

    HTTP和Scoket通信的区别。 http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并...

  • NO.39 WebServer代码实现

    1)先定义HTTP协议中相关信息的类 2)封装Http请求相关内容: 3)封装Http响应 4)处理客户端请求 5...

  • js http请求封装

网友评论

      本文标题:封装HTTP请求

      本文链接:https://www.haomeiwen.com/subject/cxpmaftx.html