第一步
pom文件添加如下依赖
<!--HttpClient-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
第二步:代码实现
GET请求
/**
* httpClient的get请求方式
* 使用GetMethod来访问一个URL对应的网页实现步骤:
* 1.生成一个HttpClient对象并设置相应的参数;
* 2.生成一个GetMethod对象并设置响应的参数;
* 3.用HttpClient生成的对象来执行GetMethod生成的Get方法;
* 4.处理响应状态码;
* 5.若响应正常,处理HTTP响应内容;
* 6.释放连接。
* @param url 请求第三方接口地址
* @param charset 编码,一般为UFT-8
* @param token token
* @param nameValuePairs 拼接参数
* @return
*/
public static String doGet(String url, String charset, String token, NameValuePair[] nameValuePairs) {
//1.生成HttpClient对象并设置参数
HttpClient httpClient = new HttpClient();
//设置Http连接超时为5秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
//2.生成GetMethod对象并设置参数
GetMethod getMethod = new GetMethod(url);
//设置get请求超时为5秒
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 30000);
if(nameValuePairs != null)
getMethod.setQueryString(nameValuePairs);
//设置请求重试处理,用的是默认的重试处理:请求三次
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
if (!token.equals("")) {
getMethod.addRequestHeader("Authorization", token);
}
String response = "";
//3.执行HTTP GET 请求
try {
int statusCode = httpClient.executeMethod(getMethod);
//4.判断访问的状态码
if (statusCode != HttpStatus.SC_OK) {
System.err.println("请求出错:" + getMethod.getStatusLine());
}
//5.处理HTTP响应内容
//HTTP响应头部信息,这里简单打印
Header[] headers = getMethod.getResponseHeaders();
for (Header h : headers) {
System.out.println(h.getName() + "---------------" + h.getValue());
}
//读取HTTP响应内容,这里简单打印网页内容
//读取为字节数组
byte[] responseBody = getMethod.getResponseBody();
response = new String(responseBody, charset);
System.out.println("-----------response:" + response);
//读取为InputStream,在网页内容数据量大时候推荐使用
//InputStream response = getMethod.getResponseBodyAsStream();
} catch (HttpException e) {
//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("请检查输入的URL!");
e.printStackTrace();
} catch (IOException e) {
//发生网络异常
System.out.println("发生网络异常!");
} finally {
//6.释放连接
getMethod.releaseConnection();
}
return response;
}
POST请求
/**
* post请求
* @param url 请求的路径
* @param jsonstr请求的信息
* @return
*/
public static String doPost(String url, String jsonstr,String token) {
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("accept", "*/*");
postMethod.addRequestHeader("connection", "Keep-Alive");
//设置json格式传送
postMethod.addRequestHeader("Content-Type", "application/json");
//必须设置下面这个Header
// postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
if (!token.equals("")) {
postMethod.addRequestHeader("Authorization", token);
}
RequestEntity requestEntity = new StringRequestEntity(jsonstr,"json","UTF-8");
postMethod.setRequestEntity(requestEntity);
String res = "";
try {
int code = httpClient.executeMethod(postMethod);
System.out.println(code);
if (code == 200) {
res = postMethod.getResponseBodyAsString();
}
} catch (IOException e) {
e.printStackTrace();
}
return res;
}
第三步:使用
获得下列接口的数据
http://10.220.4.47:21823/api/UCenter/Login
请求方式post请求
入参
public class LoginModel
{
//用户名
public string UserName { get; set; }
//密码
public string Password { get; set; }
//系统ID
public string APPID { get; set; }
返回值类型
略。。。。。。。。。。。
根据对应的返回值类型创建实体类
创建入参实体类
@Data
public class LoginModel {
@JsonProperty("UserName") //保持和入参类型一致
private String UserName; //保持和传值一致(前端的传值)
@JsonProperty("Password")
private String Password;
@JsonProperty("AppId")
private String appId;
@JsonProperty("UserId")
private String userId;
}
实现接口
String Login(LoginModel model);
实现方法:
public String Login(LoginModel model) {
try {
//请求路径
String loginUrl = "http://10.220.4.47:21823/api/UCenter/Login"
String jsonStr = JSONObject.toJSON(model).toString();
String result = doPost(loginUrl, jsonStr, "");
if (result == "") {
return "调用远程登录接口失败"
} else {
return result;
}
} catch (Exception e) {
return e.getMessage();
}
}
请求接口
@PostMapping("/login")
public String Logon(@RequestBody LoginModel loginModel) {
if (loginModel != null) {
//获得第三方接口传来的数据
return responseModel = commonService.Login(loginModel);
} else {
return "参数为空";
}
}
GET请求
public static void createCrowd(String corpid, String corpsecret) {
// 请求地址
String tokenUrl = "";
// 请求参数数组,有几个参数就创建对应大小的数组
NameValuePair[] nameValuePairs = new NameValuePair[2];
NameValuePair nameValuePair = new NameValuePair();
nameValuePair.setName("corpid"); //参数名
nameValuePair.setValue(corpid); //参数值
nameValuePairs[0] = nameValuePair;
NameValuePair nameValuePair1 = new NameValuePair();
nameValuePair1.setName("corpsecret");
nameValuePair1.setValue(corpsecret);
nameValuePairs[1] = nameValuePair1;
// 调用get请求方式获取数据
String result = HttpUtils.doGet(tokenUrl, "utf8", "", nameValuePairs);
JSONObject jsonObject = JSONObject.parseObject(result);
//获取 accessToken
String accessToken = jsonObject.get("access_token").toString();
System.out.println(accessToken);
}