前言:
网络API接口:https://api.apiopen.top/searchMusic
此API接口返回类型为JSON格式类型
GET:从指定资源请求数据
POST:向指定资源提交要被处理的数据
GET与POST的区别:
①GET在浏览器回退时是无害的,而POST会再次提交请求。
②GET只支持URL编码。
③GET参数通过URL传递,参数直接暴露在URL中会泄露信息,POST通过Request body传递不会有这样的问题。
④GET请求在URL中传递参数有长度限制,POST没有长度限制。
⑤对POST请求会险发送Header,服务器相应成功,在发送Date,服务器再次响应,需响应两次。GET会把Header与Date一起发送到服务端,服务器只响应一次。
一、POST方法
创建POST方法类
1 package com.HttpClient.Test;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5
6 import org.apache.http.HttpEntity;
7 import org.apache.http.HttpHost;
8 import org.apache.http.NameValuePair;
9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.config.RequestConfig;
11 import org.apache.http.client.entity.UrlEncodedFormEntity;
12 import org.apache.http.client.methods.CloseableHttpResponse;
13 import org.apache.http.client.methods.HttpPost;
14 import org.apache.http.impl.client.CloseableHttpClient;
15 import org.apache.http.impl.client.HttpClientBuilder;
16 import org.apache.http.util.EntityUtils;
17
18 import com.HttpClient.jiexi.HttpClient_jiexi;
19
20 public class HttpClient_post {
21
22 private String entityStr;
23 HttpClient_jiexi JSONTOOL = new HttpClient_jiexi();
24
25 //封装POST方法
26 public String post(String POST_URL,ArrayList<NameValuePair> list) {
27
28 try {
29 //把参数放入请求体中
30 UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list, "UTF-8");
31 CloseableHttpClient httpClient = HttpClientBuilder.create().build();
32 HttpPost httpPost = new HttpPost(POST_URL);
33 httpPost.setEntity(entityParam);
34 //发起请求
35 CloseableHttpResponse response = httpClient.execute(httpPost);
36 //获取返回状态,并判断是否连接成功。
37 if (response.getStatusLine().getStatusCode()==200) {
38 System.out.println("连接成功");
39 } else {
40 System.out.println("连接异常");
41 }
42 // 获得响应的实体对象
43 HttpEntity entity = response.getEntity();
44
45 //转换成字符串
46 entityStr = EntityUtils.toString(entity, "UTF-8");
47 //关闭请求
48 httpClient.close();
49
50 } catch (ClientProtocolException e) {
51 System.err.println("Http协议异常");
52 e.printStackTrace();
53 } catch (IOException e) {
54 System.err.println("IO异常");
55 e.printStackTrace();
56 }
57 return entityStr;
58 }
59
60 }
调用POST方法类
1 package com.HttpClient.Test;
2
3 import java.util.ArrayList;
4 import org.apache.http.NameValuePair;
5 import org.apache.http.message.BasicNameValuePair;
6 import org.json.JSONException;
7 import org.testng.annotations.Test;
8
9 public class HttpClient_case1 {
10
11 HttpClient_post post = new HttpClient_post();
12 private String POST_URL = "https://api.apiopen.top/searchMusic";
13 private String entity;
14 private ArrayList<NameValuePair> list;
15
16 @Test
17 public void test1() {
18 // 构造list集合,并添加参数
19 BasicNameValuePair basicNameValuePair = new BasicNameValuePair("name", "十年");
20 list = new ArrayList<>();
21 list.add(basicNameValuePair);
22 // 执行请求,需要传入URL与参数
23 entity = post.post(POST_URL,list);
24 System.out.println(entity);
25 }
26
27 }
二、GET方法
创建GET方法类
package com.HttpClient.Test;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HttpClient_get {
public String entityStr ;
public CloseableHttpResponse response ;
public String get(String GET_URL,ArrayList<NameValuePair> list) throws URISyntaxException{try {
CloseableHttpClient httpClient = HttpClients.createDefault();
URIBuilder uriBuilder = new URIBuilder(GET_URL);
uriBuilder.setParameters(list);
//根据带参数的URI对象构建GET请求对象
HttpGet httpGet = new HttpGet(uriBuilder.build());
//执行请求
response = httpClient.execute(httpGet);
//获得响应的实体对象
HttpEntity entity = response.getEntity();
//转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8");
//关闭请求
httpClient.close();
} catch (ClientProtocolException e) {
System.err.println("Http协议异常");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
}
return entityStr;
}
}
调用GET方法类
package com.HttpClient.Test;
import java.net.URISyntaxException;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.testng.annotations.Test;
public class HttpClient_case1 {
HttpClient_get get = new HttpClient_get();
private String URL = "https://api.apiopen.top/searchMusic";
private String entity;
private ArrayList<NameValuePair> list;
@Test
public void test1() throws URISyntaxException {
// 构造list集合
BasicNameValuePair basicNameValuePair = new BasicNameValuePair("name", "十年");
list = new ArrayList<>();
list.add(basicNameValuePair);
// 执行请求,需要传入URL与参数
entity = get.get(URL, list);
System.out.println(entity);
}
}