首先介绍一种简单的方式,因为get请求传递参数是可以直接拼凑在Url后的,这个是最基本的东西,即使有各种的工具类,本质还是这个,我们先把最本质的东西贴出来,接下来再介绍一些工具类。
@Test
public void test01() throws IOException {
// 简单建立一个客户端
CloseableHttpClient client = HttpClientBuilder.create().build();
// 建立请求url
StringBuilder sb = new StringBuilder("http://www.baidu.com");
sb.append("?a=1");
// 这里注意,如果需要传递数组的话,需要是用b[]=1&b[]=2这种格式,因为[和]都算是特殊字符,需要做编码操作
//sb.append(URLEncoder.encode("b[]=1&b[]=2", "utf-8")); JDK-8的版本使用,会抛异常,这里编码也需要像下面一样拆开
sb.append("&"+URLEncoder.encode("b[]", StandardCharsets.UTF_8)+"=1"); //JDK-10以上的版本
sb.append("&"+URLEncoder.encode("b[]", StandardCharsets.UTF_8)+"=2"); //JDK-10以上的版本
System.out.println(sb.toString());
HttpGet get = new HttpGet(sb.toString());
// 设置请求头 get.setHeader("","");
CloseableHttpResponse execute = client.execute(get);
}
这个地方可以很明显的看到一个弊端,就是当需要编码时,拼接时太麻烦,所以我们可以使用工具类URIBuilder帮我们来生成url
@Test
public void test02() throws Exception {
// 简单建立一个客户端
CloseableHttpClient client = HttpClientBuilder.create().build();
// 建立请求url
URIBuilder uriBuilder = new URIBuilder("http://www.baidu.com");
//单个属性注入,多个属性,就重复多遍就好,同名不会产生覆盖
//uriBuilder.addParameter("a", "1");
//这里我们主要演示多个
List<NameValuePair> list = new ArrayList<>();
list.add(new BasicNameValuePair("a", "1"));
list.add(new BasicNameValuePair("b[]", "zhangsan"));
list.add(new BasicNameValuePair("b[]", "lisi"));
uriBuilder.addParameters(list);
//我们这里直接build,就不会发生编码解码的问题了
HttpGet get = new HttpGet(uriBuilder.build());
// 设置请求头 get.setHeader("","");
CloseableHttpResponse execute = client.execute(get);
}