1. 概述

在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。

在Java项目中调用第三方接口的方式有:

①通过JDK网络类Java.net.HttpURLConnection;

②通过common封装好的HttpClient;

③通过Apache封装好的CloseableHttpClient;

④通过SpringBoot-RestTemplate;

2. Java调用第三方http接口的方式

2.1 通过JDK网络类Java.net.HttpURLConnection

比较原始的一种调用做法,这里把get请求和post请求都统一放在一个方法里面,直接上代码:

  1. import java.io.*;
  2. import java.net.HttpURLConnection;
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5.  
  6. /**
  7. * @Author: Yang JianQiu
  8. * @Date: 2019/4/26 11:34
  9. * jdk类HttpURLConnection调用第三方http接口
  10. *
  11. * 通常分get和post两种方式
  12. *
  13. * 参考资料:
  14. * http://www.cnblogs.com/angusbao/p/7727649.html
  15. */
  16. public class HttpUrlConnectionToInterface {
  17.  
  18. /**
  19. * 以post或get方式调用对方接口方法,
  20. * @param pathUrl
  21. */
  22. public static void doPostOrGet(String pathUrl, String data){
  23. OutputStreamWriter out = null;
  24. BufferedReader br = null;
  25. String result = "";
  26. try {
  27. URL url = new URL(pathUrl);
  28. //打开和url之间的连接
  29. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  30. //请求方式
  31. conn.setRequestMethod("POST");
  32. //conn.setRequestMethod("GET");
  33.  
  34. //设置通用的请求属性
  35. conn.setRequestProperty("accept", "*/*");
  36. conn.setRequestProperty("connection", "Keep-Alive");
  37. conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
  38. conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
  39.  
  40. //DoOutput设置是否向httpUrlConnection输出,DoInput设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
  41. conn.setDoOutput(true);
  42. conn.setDoInput(true);
  43.  
  44. /**
  45. * 下面的三句代码,就是调用第三方http接口
  46. */
  47. //获取URLConnection对象对应的输出流
  48. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  49. //发送请求参数即数据
  50. out.write(data);
  51. //flush输出流的缓冲
  52. out.flush();
  53.  
  54. /**
  55. * 下面的代码相当于,获取调用第三方http接口后返回的结果
  56. */
  57. //获取URLConnection对象对应的输入流
  58. InputStream is = conn.getInputStream();
  59. //构造一个字符流缓存
  60. br = new BufferedReader(new InputStreamReader(is));
  61. String str = "";
  62. while ((str = br.readLine()) != null){
  63. result += str;
  64. }
  65. System.out.println(result);
  66. //关闭流
  67. is.close();
  68. //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。
  69. conn.disconnect();
  70.  
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }finally {
  74. try {
  75. if (out != null){
  76. out.close();
  77. }
  78. if (br != null){
  79. br.close();
  80. }
  81. } catch (IOException e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. }
  86.  
  87. public static void main(String[] args) {
  88. /**
  89. *手机信息查询接口:http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号
  90.      *      http://api.showji.com/Locating/www.showji.com.aspx?m=手机号&output=json&callback=querycallback
  91. */
  92. doPostOrGet("https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "");
  93. }
  94. }

2.2 通过apache common封装好的HttpClient

httpClient的get或post请求方式步骤:

  1. 生成一个HttpClient对象并设置相应的参数;
  2. 生成一个GetMethod对象或PostMethod并设置响应的参数;
  3. 用HttpClient生成的对象来执行GetMethod生成的Get方法;
  4. 处理响应状态码;
  5. 若响应正常,处理HTTP响应内容;
  6. 释放连接。

导入如下jar包:

  1. <!--HttpClient-->
  2. <dependency>
  3. <groupId>commons-httpclient</groupId>
  4. <artifactId>commons-httpclient</artifactId>
  5. <version>3.1</version>
  6. </dependency>

代码如下:

  1. import com.alibaba.fastjson.JSONObject;
  2. import org.apache.commons.httpclient.*;
  3. import org.apache.commons.httpclient.methods.GetMethod;
  4. import org.apache.commons.httpclient.methods.PostMethod;
  5. import org.apache.commons.httpclient.params.HttpMethodParams;
  6.  
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9.  
  10. /**
  11. * @Author: Yang JianQiu
  12. * @Date: 2019/4/28 11:07
  13. *
  14. * HttpClient模拟get、post请求并发送请求参数(json等)
  15. * 【参考资料】
  16. * https://javasam.iteye.com/blog/2117845
  17. * https://blog.csdn.net/qq_28379809/article/details/82898792
  18. */
  19. public class HttpClientToInterface {
  20.  
  21. /**
  22. * httpClient的get请求方式
  23. * 使用GetMethod来访问一个URL对应的网页实现步骤:
  24. * 1.生成一个HttpClient对象并设置相应的参数;
  25. * 2.生成一个GetMethod对象并设置响应的参数;
  26. * 3.用HttpClient生成的对象来执行GetMethod生成的Get方法;
  27. * 4.处理响应状态码;
  28. * 5.若响应正常,处理HTTP响应内容;
  29. * 6.释放连接。
  30. * @param url
  31. * @param charset
  32. * @return
  33. */
  34. public static String doGet(String url, String charset){
  35. /**
  36. * 1.生成HttpClient对象并设置参数
  37. */
  38. HttpClient httpClient = new HttpClient();
  39. //设置Http连接超时为5秒
  40. httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
  41.  
  42. /**
  43. * 2.生成GetMethod对象并设置参数
  44. */
  45. GetMethod getMethod = new GetMethod(url);
  46. //设置get请求超时为5秒
  47. getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
  48. //设置请求重试处理,用的是默认的重试处理:请求三次
  49. getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
  50.  
  51. String response = "";
  52.  
  53. /**
  54. * 3.执行HTTP GET 请求
  55. */
  56. try {
  57. int statusCode = httpClient.executeMethod(getMethod);
  58.  
  59. /**
  60. * 4.判断访问的状态码
  61. */
  62. if (statusCode != HttpStatus.SC_OK){
  63. System.err.println("请求出错:" + getMethod.getStatusLine());
  64. }
  65.  
  66. /**
  67. * 5.处理HTTP响应内容
  68. */
  69. //HTTP响应头部信息,这里简单打印
  70. Header[] headers = getMethod.getResponseHeaders();
  71. for (Header h: headers){
  72. System.out.println(h.getName() + "---------------" + h.getValue());
  73. }
  74. //读取HTTP响应内容,这里简单打印网页内容
  75. //读取为字节数组
  76. byte[] responseBody = getMethod.getResponseBody();
  77. response = new String(responseBody, charset);
  78. System.out.println("-----------response:" + response);
  79. //读取为InputStream,在网页内容数据量大时候推荐使用
  80. //InputStream response = getMethod.getResponseBodyAsStream();
  81.  
  82. } catch (HttpException e) {
  83. //发生致命的异常,可能是协议不对或者返回的内容有问题
  84. System.out.println("请检查输入的URL!");
  85. e.printStackTrace();
  86. } catch (IOException e){
  87. //发生网络异常
  88. System.out.println("发生网络异常!");
  89. }finally {
  90. /**
  91. * 6.释放连接
  92. */
  93. getMethod.releaseConnection();
  94. }
  95. return response;
  96. }
  97.  
  98. /**
  99. * post请求
  100. * @param url
  101. * @param json
  102. * @return
  103. */
  104. public static String doPost(String url, JSONObject json){
  105. HttpClient httpClient = new HttpClient();
  106. PostMethod postMethod = new PostMethod(url);
  107.  
  108. postMethod.addRequestHeader("accept", "*/*");
  109. postMethod.addRequestHeader("connection", "Keep-Alive");
  110. //设置json格式传送
  111. postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8");
  112. //必须设置下面这个Header
  113. 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");
  114. //添加请求参数
  115. postMethod.addParameter("commentId", json.getString("commentId"));
  116.  
  117. String res = "";
  118. try {
  119. int code = httpClient.executeMethod(postMethod);
  120. if (code == 200){
  121. res = postMethod.getResponseBodyAsString();
  122. System.out.println(res);
  123. }
  124. } catch (IOException e) {
  125. e.printStackTrace();
  126. }
  127. return res;
  128. }
  129.  
  130. public static void main(String[] args) {
  131. doGet("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "UTF-8");
  132. System.out.println("-----------分割线------------");
  133. System.out.println("-----------分割线------------");
  134. System.out.println("-----------分割线------------");
  135.  
  136. JSONObject jsonObject = new JSONObject();
  137. jsonObject.put("commentId", "13026194071");
  138. doPost("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", jsonObject);
  139. }
  140. }

2.3 通过Apache封装好的CloseableHttpClient

CloseableHttpClient是在HttpClient的基础上修改更新而来的,这里还涉及到请求头token的设置(请求验证),利用fastjson转换请求或返回结果字符串为json格式,当然上面两种方式也是可以设置请求头token、json的,这里只在下面说明。

导入如下jar包:

  1. <!--CloseableHttpClient-->
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.alibaba</groupId>
  9. <artifactId>fastjson</artifactId>
  10. <version>1.2.28</version>
  11. </dependency>

代码如下:

  1. import com.alibaba.fastjson.JSONObject;
  2. import org.apache.http.HttpResponse;
  3. import org.apache.http.HttpStatus;
  4. import org.apache.http.client.methods.HttpGet;
  5. import org.apache.http.client.methods.HttpPost;
  6. import org.apache.http.entity.StringEntity;
  7. import org.apache.http.impl.client.CloseableHttpClient;
  8. import org.apache.http.impl.client.HttpClientBuilder;
  9. import org.apache.http.util.EntityUtils;
  10.  
  11. import java.io.IOException;
  12.  
  13. /**
  14. * @Author: Yang JianQiu
  15. * @Date: 2019/4/26 11:41
  16. * Apache封装好的CloseableHttpClient
  17. * 【参考资料】
  18. * https://www.cnblogs.com/siv8/p/6222709.html
  19. * https://blog.csdn.net/qq_35860138/article/details/82967727
  20. */
  21. public class CloseableHttpClientToInterface {
  22.  
  23. private static String tokenString = "";
  24. private static String AUTH_TOKEN_EXPIRED = "AUTH_TOKEN_EXPIRED";
  25. private static CloseableHttpClient httpClient = null;
  26.  
  27. /**
  28. * 以get方式调用第三方接口
  29. * @param url
  30. * @return
  31. */
  32. public static String doGet(String url, String token){
  33. //创建HttpClient对象
  34. CloseableHttpClient httpClient = HttpClientBuilder.create().build();
  35. HttpGet get = new HttpGet(url);
  36.  
  37. try {
  38. if (tokenString != null && !tokenString.equals("")){
  39. tokenString = getToken();
  40. }
  41. //api_gateway_auth_token自定义header头,用于token验证使用
  42. get.addHeader("api_gateway_auth_token", tokenString);
  43. get.addHeader("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");
  44. HttpResponse response = httpClient.execute(get);
  45. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
  46. //返回json格式
  47. String res = EntityUtils.toString(response.getEntity());
  48. return res;
  49. }
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }
  53. return null;
  54. }
  55.  
  56. /**
  57. * 以post方式调用第三方接口
  58. * @param url
  59. * @param json
  60. * @return
  61. */
  62. public static String doPost(String url, JSONObject json){
  63.  
  64. try {
  65. if (httpClient == null){
  66. httpClient = HttpClientBuilder.create().build();
  67. }
  68.  
  69. HttpPost post = new HttpPost(url);
  70.  
  71. if (tokenString != null && !tokenString.equals("")){
  72. tokenString = getToken();
  73. }
  74.  
  75. //api_gateway_auth_token自定义header头,用于token验证使用
  76. post.addHeader("api_gateway_auth_token", tokenString);
  77. post.addHeader("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");
  78.  
  79. StringEntity s = new StringEntity(json.toString());
  80. s.setContentEncoding("UTF-8");
  81. //发送json数据需要设置contentType
  82. s.setContentType("application/x-www-form-urlencoded");
  83. //设置请求参数
  84. post.setEntity(s);
  85. HttpResponse response = httpClient.execute(post);
  86.  
  87. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
  88. //返回json格式
  89. String res = EntityUtils.toString(response.getEntity());
  90. return res;
  91. }
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }finally {
  95. if (httpClient != null){
  96. try {
  97. httpClient.close();
  98. } catch (IOException e) {
  99. e.printStackTrace();
  100. }
  101. }
  102. }
  103. return null;
  104. }
  105.  
  106. /**
  107. * 获取第三方接口的token
  108. */
  109. public static String getToken(){
  110.  
  111. String token = "";
  112.  
  113. JSONObject object = new JSONObject();
  114. object.put("appid", "appid");
  115. object.put("secretkey", "secretkey");
  116.  
  117. try {
  118. if (httpClient == null){
  119. httpClient = HttpClientBuilder.create().build();
  120. }
  121. HttpPost post = new HttpPost("http://localhost/login");
  122.  
  123. post.addHeader("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");
  124.  
  125. StringEntity s = new StringEntity(object.toString());
  126. s.setContentEncoding("UTF-8");
  127. //发送json数据需要设置contentType
  128. s.setContentType("application/x-www-form-urlencoded");
  129. //设置请求参数
  130. post.setEntity(s);
  131. HttpResponse response = httpClient.execute(post);
  132.  
  133. //这里可以把返回的结果按照自定义的返回数据结果,把string转换成自定义类
  134. //ResultTokenBO result = JSONObject.parseObject(response, ResultTokenBO.class);
  135.  
  136. //把response转为jsonObject
  137. JSONObject result = JSONObject.parseObject(response);
  138. if (result.containsKey("token")){
  139. token = result.getString("token");
  140. }
  141. } catch (Exception e) {
  142. e.printStackTrace();
  143. }
  144. return token;
  145. }
  146.  
  147. /**
  148. * 测试
  149. */
  150. public static void test(String telephone){
  151.  
  152. JSONObject object = new JSONObject();
  153. object.put("telephone", telephone);
  154.  
  155. try {
  156. //首先获取token
  157. tokenString = getToken();
  158. String response = doPost("http://localhost/searchUrl", object);
  159.  
  160. //如果返回的结果是list形式的,需要使用JSONObject.parseArray转换
  161. //List<Result> list = JSONObject.parseArray(response, Result.class);
  162.  
  163. System.out.println(response);
  164.  
  165. } catch (Exception e) {
  166. e.printStackTrace();
  167. }
  168. }
  169.  
  170. public static void main(String[] args) {
  171. test("12345678910");
  172. }
  173.  
  174. }

2.4 通过SpringBoot-RestTemplate

springBoot-RestTemple是上面三种方式的集大成者,代码编写更加简单,目前可以采用的调用第三方接口有:

  • delete() 在特定的URL上对资源执行HTTP DELETE操作
  • exchange() 在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的
  • execute() 在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象
  • getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象
  • getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
  • postForEntity() POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得到的
  • postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象
  • headForHeaders() 发送HTTP HEAD请求,返回包含特定资源URL的HTTP头
  • optionsForAllow() 发送HTTP OPTIONS请求,返回对特定URL的Allow头信息
  • postForLocation() POST 数据到一个URL,返回新创建资源的URL
  • put() PUT 资源到特定的URL

注意:目前标红的为常用的

首先导入springboot的web包

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.0.4.RELEASE</version>
  5. </parent>
  6.  
  7. <dependencies>
  8. <!--CloseableHttpClient-->
  9. <dependency>
  10. <groupId>org.apache.httpcomponents</groupId>
  11. <artifactId>httpclient</artifactId>
  12. <version>4.5.2</version>
  13. </dependency>
  14.  
  15. <!--spring restTemplate-->
  16. <!-- @ConfigurationProperties annotation processing (metadata for IDEs)
  17. 生成spring-configuration-metadata.json类,需要引入此类-->
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-configuration-processor</artifactId>
  21. <optional>true</optional>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-aop</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-web</artifactId>
  30. <exclusions>
  31. <exclusion>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-tomcat</artifactId>
  34. </exclusion>
  35. </exclusions>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-starter-jetty</artifactId>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter-test</artifactId>
  44. <scope>test</scope>
  45. </dependency>
  46. </dependencies>

在启动类同包下创建RestTemplateConfig.java类

  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.http.client.ClientHttpRequestFactory;
  4. import org.springframework.http.client.SimpleClientHttpRequestFactory;
  5. import org.springframework.web.client.RestTemplate;
  6.  
  7. /**
  8. * @Author: Yang JianQiu
  9. * @Date: 2019/4/28 14:01
  10. */
  11. @Configuration
  12. public class RestTemplateConfig {
  13.  
  14. @Bean
  15. public RestTemplate restTemplate(ClientHttpRequestFactory factory){
  16. return new RestTemplate(factory);
  17. }
  18.  
  19. @Bean
  20. public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
  21. SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
  22. factory.setConnectTimeout(15000);
  23. factory.setReadTimeout(5000);
  24. return factory;
  25. }
  26. }

然后在Service类(RestTemplateToInterface )中注入使用

具体代码如下:

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.swordfall.model.User;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.http.*;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.web.client.RestTemplate;
  7.  
  8. /**
  9. * @Author: Yang JianQiu
  10. * @Date: 2019/4/28 14:13
  11. *
  12. * 【参考资料】
  13. * https://blog.csdn.net/qq_15452971/article/details/79416469
  14. * https://blog.csdn.net/weixin_40461281/article/details/83540604
  15. */
  16. @Service
  17. public class RestTemplateToInterface {
  18.  
  19. @Autowired
  20. private RestTemplate restTemplate;
  21.  
  22. /**
  23. * 以get方式请求第三方http接口 getForEntity
  24. * @param url
  25. * @return
  26. */
  27. public User doGetWith1(String url){
  28. ResponseEntity<User> responseEntity = restTemplate.getForEntity(url, User.class);
  29. User user = responseEntity.getBody();
  30. return user;
  31. }
  32.  
  33. /**
  34. * 以get方式请求第三方http接口 getForObject
  35. * 返回值返回的是响应体,省去了我们再去getBody()
  36. * @param url
  37. * @return
  38. */
  39. public User doGetWith2(String url){
  40. User user = restTemplate.getForObject(url, User.class);
  41. return user;
  42. }
  43.  
  44. /**
  45. * 以post方式请求第三方http接口 postForEntity
  46. * @param url
  47. * @return
  48. */
  49. public String doPostWith1(String url){
  50. User user = new User("小白", 20);
  51. ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, user, String.class);
  52. String body = responseEntity.getBody();
  53. return body;
  54. }
  55.  
  56. /**
  57. * 以post方式请求第三方http接口 postForEntity
  58. * @param url
  59. * @return
  60. */
  61. public String doPostWith2(String url){
  62. User user = new User("小白", 20);
  63. String body = restTemplate.postForObject(url, user, String.class);
  64. return body;
  65. }
  66.  
  67. /**
  68. * exchange
  69. * @return
  70. */
  71. public String doExchange(String url, Integer age, String name){
  72. //header参数
  73. HttpHeaders headers = new HttpHeaders();
  74. String token = "asdfaf2322";
  75. headers.add("authorization", token);
  76. headers.setContentType(MediaType.APPLICATION_JSON);
  77.  
  78. //放入body中的json参数
  79. JSONObject obj = new JSONObject();
  80. obj.put("age", age);
  81. obj.put("name", name);
  82.  
  83. //组装
  84. HttpEntity<JSONObject> request = new HttpEntity<>(obj, headers);
  85. ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, String.class);
  86. String body = responseEntity.getBody();
  87. return body;
  88. }
  89. }

总结

【github地址】

https://github.com/SwordfallYeung/JavaInvokingHttpInterface.git

【参考资料】

http://www.cnblogs.com/angusbao/p/7727649.html 纯Java api HttpURLConnection

https://blog.csdn.net/chijiandi/article/details/81388240 纯Java api HttpURLConnection

https://www.cnblogs.com/xuegu/p/8490815.html 封装api HttpClient

https://www.cnblogs.com/unknows/p/8534713.html

https://blog.csdn.net/qq_35860138/article/details/82967727 封装api HttpClient

https://blog.csdn.net/a1032818891/article/details/81172478 SpringBoot-RestTemplate

Java调用第三方http接口的方式的更多相关文章

  1. Java调用Http/Https接口(6)--RestTemplate调用Http/Https接口

    RestTemplate是Spring提供的用于访问Http接口的客户端,提供同步的API:在将来的Spring版本中可能会过时,将逐渐被WebClient替代.文中所使用到的软件版本:Java 1. ...

  2. Java调用Http/Https接口(5)--HttpAsyncClient调用Http/Https接口

    HttpAsyncClient是HttpClient的异步版本,提供异步调用的api.文中所使用到的软件版本:Java 1.8.0_191.HttpClient 4.1.4. 1.服务端 参见Java ...

  3. Java调用Http/Https接口(4)--HttpClient调用Http/Https接口

    HttpClient是Apache HttpComponents项目下的一个组件,是Commons-HttpClient的升级版,两者api调用写法也很类似.文中所使用到的软件版本:Java 1.8. ...

  4. Java调用Http/Https接口(3)--Commons-HttpClient调用Http/Https接口

    Commons-HttpClient原来是Apache Commons项目下的一个组件,现已被HttpComponents项目下的HttpClient组件所取代:作为调用Http接口的一种选择,本文介 ...

  5. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  6. Java调用Http/Https接口(1)--编写服务端

    Http接口输入的数据一般是键值对或json数据,返回的一般是json数据.本系列文章主要介绍Java调用Http接口的各种方法,本文主要介绍服务端的编写,方便后续文章里的客户端的调用.文中所使用到的 ...

  7. Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程[1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的res ...

  8. Java 调用Restful API接口的几种方式--HTTPS

    摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...

  9. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

随机推荐

  1. 海思uboot启动流程详细分析(一)

    第一阶段 start.S 首先我们可以在u-boot.lds中看到ENTRY(_start),即指定了入口_start,_start也就是整个start.S的最开始: 1. reset 在arch\a ...

  2. Step by Step Recipe for Securing Kafka with Kerberos

    Short Description: Step by Step Recipe for Securing Kafka with Kerberos. Article I found it is a lit ...

  3. P1177 【模板】快速排序 题解

    本质为sort,这里我们用优先队列(堆)解决. 什么是堆? 堆 堆是一个完全二叉树,而且是每层都有规律的二叉树 规律大概是: 小根堆:最上层数的大小最小,往下每层结点都比父亲结点大,比两个儿子结点小 ...

  4. windows环境中JDK环境变量配置

    一.环境准备 Windows10 jdk-9.0.1 二.下载并安装JDK 到Java的官网下载JDK安装包,地址:http://www.oracle.com/technetwork/java/jav ...

  5. Ubuntu16 搭建Git 服务器

    刚入职一个月左右,昨晚公司给培训了SVN和Git的使用.之前在研究生期间,和导师做项目就一直使用git做版本管理.想起研究生有一段时间,git总出错(秘钥都不好使了,只有某个机器生成的rsa key ...

  6. 网络流学习(转载自ssw 的博客)

    众所周知,网络流是探究网络上运输的一种图论分支.但是大多数人在第一次接触这个题时都有些畏惧感(比如说我),大佬可以自信跳过.. 本文包括: 1.网络流的概念及基本性质 2.略谈 Edmonds-Kar ...

  7. cocos creator入门

    前面的话 Cocos Creator 是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现,以及快速开发游戏所需要的各种图形界面工具.Cocos Creator ...

  8. codeforces581D

    Three Logos CodeForces - 581D Three companies decided to order a billboard with pictures of their lo ...

  9. ajax基本原理与案例

    一.什么是Ajax AJAX即“Asynchronous Javascript And XML”( 异步 JavaScript和XML),AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互 ...

  10. 单元测试之Fixture

    声明: 作者:zhaojun  创建日期:2017-08-04  更新日期:2017-08-07 一.什么是Fixture,Fixture有什么作用,为什么需要使用Fixture # 下载 pip i ...