美文网首页
Java OkHttpClient3 发送HTTP Get和Po

Java OkHttpClient3 发送HTTP Get和Po

作者: smmtest | 来源:发表于2017-05-22 17:17 被阅读1250次

    发送HTTP请求有很多包可以实现,这里介绍OkHttpClient3
    (想了解其他一些实现方法和他们之间的区别,请戳:
    http://blog.csdn.net/zhangcanyan/article/details/51793951

    maven配置如下

    <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>3.8.0</version>
            </dependency>
    

    Get请求如下:

    public void OkHttpGet(String url) {
            OkHttpClient okHttpClient = new OkHttpClient();
            //不配url方法会报错,肯定要有访问地址的嘛
            //.Builder是Request内部类 .url()返回Builder .build()返回Request对象
            Request request = new Request.Builder()
                    //.addHeader("a", "b")//.addHeader添加键值对header信息
                    //.get()//可加可不加
                    .url(url)
                    .build();
            Call call = okHttpClient.newCall(request);
            try {
                Response response = call.execute();
                System.out.println(response.body().string());
                //http状态码
                System.out.println(response.code());
                //response的头信息
                System.out.println(response.headers().toString());
                //请求响应时间,收到时间减去发送的时间,单位毫秒
                System.out.println(response.receivedResponseAtMillis()-response.sentRequestAtMillis());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    可以反过来记忆需要用到的方法response需要call.execute->call需要okhttpclient对象和request,request中添加需要的参数和地址

    注意:Request.Builder中build方法对url进行判断,如果为空就会报
    "url == null"这个错

    public Request build() {
                if(this.url == null) {
                    throw new IllegalStateException("url == null");
                } else {
                    return new Request(this);
                }
            }
    

    Get方法结果


    中国天气网接口例子

    Post请求如下:

    public void OkHttpPost(String url){
             //ssl认证重写
            OkHttpClient okHttpClient=new OkHttpClient.Builder().hostnameVerifier(
                    new HostnameVerifier() {
                        @Override
                        public boolean verify(String s, SSLSession sslSession) {
                            return true;
                        }
                    }
            ).build();
            RequestBody requestBody=new FormBody.Builder()
                    .add("oldPassword","111111")
                    .add("newPassword","111111")
                    .build();
    
            Request request=new Request.Builder()
                    .url(url)
                    .post(requestBody)
                    .addHeader("Cookie","JSESSIONID=299571E0E40DA6E9962E41B87A669BBB")
                    .addHeader("content-type", "application/json")
                    .addHeader("cache-control", "no-cache")
                    .build();
            Call call=okHttpClient.newCall(request);
    
            try {
                Response response=call.execute();
                System.out.println(response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    和Get方法差不多。区别在于Request中需要添加.post请求,参数是requestBody
    所以要实例requestbody对象,并且添加参数。FormBody是RequstBody的子类,里面有add添加参数方法

    注意:如果碰到有些网站登录时会说 网站不安全之类的 会报如下错误


    这里需要重写HostnameVerifier中的verify方法,强制它认证成功


    详细操作和原理请戳:
    http://blog.csdn.net/notHeadache/article/details/52133468

    结果:


    相关文章

      网友评论

          本文标题:Java OkHttpClient3 发送HTTP Get和Po

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