接口OkHttp系列(二)- Json格式、Header、Cookie、模拟浏览器

目录

  • 1、Json格式

  • 2、Header

  • 3、Cookie

  • 4、模拟浏览器

 

1、Json格式

 

 

1、创建Json类。

发送数据将数据类型转为Json格式。

接收数据将数据类型转为Json格式。

脚本代码:

package com.test.demo;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.json.JSONObject;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Json格式
 *
 * @author wangmcn
 *
 */
public class Json {

       public static void main(String[] args) throws IOException {

              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();

              // 数据类型为Json格式
              MediaType JSON = MediaType.parse("application/json; charset=utf-8");
              // Json数据
              String jsonStr = "{\"username\":\"admin\",\"password\":\"123456\"}";
              // 得到RequestBody对象
              RequestBody body = RequestBody.create(JSON, jsonStr);

              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/json")
                            .post(body)
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: " + response.code());
                     System.out.println("获取响应信息: " + response.message());
              }
             
              // 将返回的响应结果字符串转化成为Json对象
              JSONObject resultJson = new JSONObject(response.body().string());
              System.out.println("获取网页源码: " + resultJson);
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();

       }

}

 

2、运行结果:

 


 

2、Header

 

 

1、创建Header类。

使用header(name,value)来设置HTTP头的唯一值(如果name已经存在,将会移除该name对应的value,然后将新value添加进来,即替换掉原来的value值)。

使用addHeader(name,value)来补充新值(即使当前值已经存在,也只会添加新的value值,并不会移除或替换原来的值)。

添加2个Header:

内容格式设定为Json格式("Content-Type", "application/json;charset:utf-8")

自定义Header("Self-Header", "MySelfHeader")。

脚本代码:

package com.test.demo;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.json.JSONObject;

import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Header
 *
 * @author wangmcn
 *
 */
public class Header {

       public static void main(String[] args) throws IOException {

              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();

              // 数据类型为Json格式
              MediaType JSON = MediaType.parse("application/json; charset=utf-8");
              // Json数据
              String jsonStr = "{\"username\":\"admin\",\"password\":\"123456\"}";
              // 得到RequestBody对象
              RequestBody body = RequestBody.create(JSON, jsonStr);
             
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/header")
                            .addHeader("Content-Type", "application/json;charset:utf-8")
                            .addHeader("Self-Header", "MySelfHeader")
                            .post(body)
                            .build();

              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: " + response.code());
                     System.out.println("获取响应信息: " + response.message());
              }
             
              // 将返回的响应结果字符串转化成为Json对象
              JSONObject resultJson = new JSONObject(response.body().string());
              System.out.println("获取网页源码: " + resultJson);
             
              // 获取请求头
              Headers requestHeader = request.headers();
              System.out.println("获取请求头: " + requestHeader);
             
              // 获取响应头
              Headers responseHeader = response.headers();
              System.out.println("获取响应头: " + responseHeader);
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();

       }

}

 

2、运行结果:

 

 

 

3、Cookie

 

 

1、创建Cookie类。

在Header里添加Cookie(addHeader("Cookie", "login=true"))。

脚本代码:

package com.test.demo;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.json.JSONObject;

import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Cookie
 *
 * @author wangmcn
 *
 */
public class Cookie {

       public static void main(String[] args) throws IOException {

              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();

              // 数据类型为Json格式
              MediaType JSON = MediaType.parse("application/json; charset=utf-8");
              // Json数据
              String jsonStr = "{\"username\":\"admin\",\"password\":\"123456\"}";
              // 得到RequestBody对象
              RequestBody body = RequestBody.create(JSON, jsonStr);
             
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/cookie")
                            .addHeader("Content-Type", "application/json;charset:utf-8")
                            .addHeader("Cookie", "login=true")
                            .post(body)
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: " + response.code());
                     System.out.println("获取响应信息: " + response.message());
              }
             
              // 将返回的响应结果字符串转化成为Json对象
              JSONObject resultJson = new JSONObject(response.body().string());
              System.out.println("获取网页源码: " + resultJson);
             
              // 获取响应头与Cookie
              Headers responseHeader = response.headers();
              System.out.println("获取响应头: " + responseHeader);
              System.out.println("获取响应头里的Cookie: " + responseHeader.get("Set-Cookie"));
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();

       }

}

 

2、运行结果:

 

 

 

4、模拟浏览器

 

 

模拟浏览器操作需要在Header里添加User-Agent参数与参数值,那么这个参数值怎么获取呢?

如图所示:

打开Fiddler,之后打开浏览器随便访问一个地址(如https://www.baidu.com/),此时Fiddler抓取请求头信息里就可以看到User-Agent的参数与参数值,将此参数与参数值添加到脚本的Header里即可。

 

 

1、创建Browser类。

模拟浏览器addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36")

脚本代码:

package com.test.demo;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 模拟浏览器
 *
 * @author wangmcn
 *
 */
public class Browser {

       public static void main(String[] args) throws IOException {

              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();

              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/getdemo")
                            .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36")
                            .get()
                            .build();

              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: " + response.code());
                     System.out.println("获取响应信息: " + response.message());
                     System.out.println("获取网页源码: " + response.body().string());
              }
             
              // 获取请求头
              Headers requestHeader = request.headers();
              System.out.println("获取请求头: " + requestHeader);
             
              // 获取响应头
              Headers responseHeader = response.headers();
              System.out.println("获取响应头: " + responseHeader);
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();

       }

}

2、运行结果:

 

如果您觉得文章还不错,请 点赞、分享、在看、收藏 一下,因为这将是我持续输出更多优质文章的最强动力!

在这里推荐一个我自己创建的软件测试交流群,QQ:642830685,群中会不定期的分享软件测试资源,测试面试题以及测试行业资讯,大家可以在群中积极交流技术,还有大佬为你答疑解惑。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值