1. import org.apache.http.HttpEntity;
  2. import org.apache.http.HttpHost;
  3. import org.apache.http.HttpStatus;
  4. import org.apache.http.auth.AuthScope;
  5. import org.apache.http.auth.UsernamePasswordCredentials;
  6. import org.apache.http.client.CredentialsProvider;
  7. import org.apache.http.client.methods.CloseableHttpResponse;
  8. import org.apache.http.client.methods.HttpGet;
  9. import org.apache.http.client.protocol.HttpClientContext;
  10. import org.apache.http.config.Registry;
  11. import org.apache.http.config.RegistryBuilder;
  12. import org.apache.http.conn.socket.ConnectionSocketFactory;
  13. import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
  14. import org.apache.http.conn.socket.PlainConnectionSocketFactory;
  15. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  16. import org.apache.http.conn.ssl.SSLContextBuilder;
  17. import org.apache.http.conn.ssl.SSLContexts;
  18. import org.apache.http.conn.ssl.TrustStrategy;
  19. import org.apache.http.impl.auth.BasicScheme;
  20. import org.apache.http.impl.client.BasicAuthCache;
  21. import org.apache.http.impl.client.BasicCredentialsProvider;
  22. import org.apache.http.impl.client.CloseableHttpClient;
  23. import org.apache.http.impl.client.HttpClientBuilder;
  24. import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  25. import org.apache.http.util.EntityUtils;
  26. import sun.net.www.protocol.http.AuthCache;
  27.  
  28. import javax.net.ssl.SSLContext;
  29. import javax.swing.*;
  30. import java.io.IOException;
  31. import java.security.KeyManagementException;
  32. import java.security.KeyStore;
  33. import java.security.KeyStoreException;
  34. import java.security.NoSuchAlgorithmException;
  35. import java.security.cert.CertificateException;
  36. import java.security.cert.X509Certificate;
  37.  
  38. /**
  39. * Created by zml on 16-11-16.\
  40. * https的GET方式调用别人的接口,其实也可以用于http协议的,注意看代码的注释
  41. */
  42. public class HttpsGET {
  43. //如果给的链接是www.baidu.com这种域名而不是IP,就在cmd黑窗口ping一下域名就可以得到IP地址
  44. String ip = "xxxx.xxx.xx.xx";
  45. //如果给的链接没有端口号,则默认写为-1
  46. int port = -1;
  47. //接口调用所使用的协议
  48. String protocol = "https";
  49.  
  50. String username = "zhangsan";
  51. String password = "password";
  52.  
  53. public String httpsRequestsGet(String apiUrl){
  54.  
  55. String responseBody = "";
  56. //注册协议并获取链接对象
  57. CloseableHttpClient httpClient = getHttpClient();
  58.  
  59. HttpHost targetHost = new HttpHost(ip,port,protocol);
  60.  
  61. //验证主机名端口号和用户名密码
  62. CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  63. credentialsProvider.setCredentials(new AuthScope(targetHost.getHostName(),targetHost.getPort()),
  64. new UsernamePasswordCredentials(username,password));
  65.  
  66. org.apache.http.client.AuthCache authScope = new BasicAuthCache();
  67. BasicScheme basicScheme = new BasicScheme();
  68.  
  69. authScope.put(targetHost,basicScheme);
  70.  
  71. HttpClientContext context = HttpClientContext.create();
  72. context.setCredentialsProvider(credentialsProvider);
  73. context.setAuthCache(authScope);
  74.  
  75. String url = protocol + "://" + ip + ":" + port + apiUrl;
  76.  
  77. //GET方式调用接口
  78. HttpGet httpGet = new HttpGet(url);
  79.  
  80. CloseableHttpResponse response = null;
  81. try {
  82. //链接目标主机,接收目标主机返回的对象
  83. response = httpClient.execute(targetHost,httpGet,context);
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. int status = response.getStatusLine().getStatusCode();
  88.  
  89. if(status== HttpStatus.SC_OK){
  90. HttpEntity entity = response.getEntity();
  91. try {
  92. responseBody = EntityUtils.toString(entity);
  93. } catch (IOException e) {
  94. e.printStackTrace();
  95. }finally {
  96. try {
  97. //关闭连接
  98. response.close();
  99. } catch (IOException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. }
  104.  
  105. return responseBody;
  106. }
  107.  
  108. private static CloseableHttpClient getHttpClient() {
  109. RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create();
  110. ConnectionSocketFactory plainSF = new PlainConnectionSocketFactory();
  111. //注册http协议,如果不需要http协议就不需要写。
  112. registryBuilder.register("http",plainSF);
  113.  
  114. //以下是注册https协议,与http不同的是多了证书的校验
  115. try {
  116. KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
  117. TrustStrategy trustStrategy = new TrustStrategy() {
  118. @Override
  119. public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
  120. return true;
  121. }
  122. };
  123.  
  124. SSLContext sslContext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, trustStrategy).build();
  125. //允许全部的证书,这样访问的时候就不用去校验证书是否可用。
  126. LayeredConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  127. //注册https协议
  128. registryBuilder.register("https",sslsf);
  129.  
  130. } catch (KeyStoreException e) {
  131. e.printStackTrace();
  132. } catch (NoSuchAlgorithmException e) {
  133. e.printStackTrace();
  134. } catch (KeyManagementException e) {
  135. e.printStackTrace();
  136. }
  137.  
  138. Registry<ConnectionSocketFactory> registry = registryBuilder.build();
  139. PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry);
  140.  
  141. return HttpClientBuilder.create().setConnectionManager(connManager).build();
  142.  
  143. }
  144. }

所依赖的jar为

  1. <dependency>
  2. <groupId>org.apache.httpcomponents</groupId>
  3. <artifactId>httpclient</artifactId>
  4. <version>4.3.5</version>
  5. </dependency>

  

springMVC、https、GET调用别人提供的接口!!!的更多相关文章

  1. springMVC、httpClient调用别人提供的接口!!!(外加定时调用)

    import com.ibm.db.util.AppConfig; import com.ibm.db.util.JacksonUitl; import org.apache.http.HttpEnt ...

  2. 调用别人提供的WebService

    在开发过程中,许多时候需要使用到别人提供的WebService接口,使用其中的方法. 在调用别人提供的接口时,会得到接口使用的文档,其中包括接口的网络地址及方法作用等. 找到WebService的ws ...

  3. 如何调用别人提供的webservice接口

    当我们拿到一个接口的时候,先别急着去调用它,我们得先测试这个接口是否正确,是否能调用成功,以及返回的数据是否是我们需要的类型等等.这时候我们需要一个工具,比如SoapUI.(最好用绿色免安装版的.)然 ...

  4. 如何调用别人提供的API?

    1:一般使用聚合数据提供的API: 百度聚合数据,进入: 2:一般是有用户名的直接登录,没有用户名的先进行注册.在搜索框中输入你想查找的API方面的关键字:例如:有关健康的 点开任意一个,你将会看到: ...

  5. 通用的调用WebService的两种方法。(调用别人提供的wsdl)(转)

    转载自:http://blog.sina.com.cn/s/blog_65933e020101incz.html1.调用WebService的Client端采用jax-ws调用WebService:流 ...

  6. jquery怎么实现跨域的访问呢?与别人提供的接口连接

    下面这个例子你可以参考下 <script> $.ajax({ async:false, url: 'http://www.mysite.com/demo.do',  // 跨域URL ty ...

  7. Spring Boot提供RESTful接口时的错误处理实践

    使用Spring Boot开发微服务的过程中,我们会使用别人提供的接口,也会设计接口给别人使用,这时候微服务应用之间的协作就需要有一定的规范. 基于rpc协议,我们一般有两种思路:(1)提供服务的应用 ...

  8. java接口对接——调用别人接口推送数据

    实际开发中经常会遇到要和其他平台或系统对接的情况,实际操作就是互相调用别人的接口获取或者推送数据, 当我们调用别人接口推送数据时,需要对方给一个接口地址以及接口的规范文档,规范中要包括接口的明确入参及 ...

  9. .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

随机推荐

  1. position:fixed失效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. js中apply()和call()方法的使用

    1.apply()方法 apply方法能劫持另外一个对象的方法,继承另外一个对象的属性.  Function.apply(obj,args)方法能接收两个参数     obj:这个对象将代替Funct ...

  3. 关于用bootstrap显示查询的后台数据

    PrintWriter pw = response.getWriter(); pw.println(sb); pw.flush(); 由于用bootstrap查询数据,页面需要自身返回bootstra ...

  4. yii2.0 框架邮件的发送

    第一步: 在main-local.php中的components中配置mailer: $config = [ 'components' => [ 'mailer' => [ 'class' ...

  5. myEclipse svn插件安装

    方法一(liuyou在安装时报空指针异常) 1.打开HELP->MyEclipse Configuration Center,切换到SoftWare标签页. 2.点击Add Site 打开对话框 ...

  6. ios显示或隐藏导航栏的底线

    根据产品需求要求把这个界面导航栏的底线去掉,下个控制器还需要有底线. 使用下面的代码实现 //在页面出现的时候就将黑线隐藏起来 -(void)viewWillAppear:(BOOL)animated ...

  7. jetty 内嵌服务

    pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodin ...

  8. mybatis动态sql

    MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素.  if choose(when,otherwise) trim(where,set) foreach 例子(2): &l ...

  9. vagrant安装及使用方法

    http://www.chenjie.info/1757 http://blog.csdn.net/zsl10/article/category/6324870   --以下转自MaxWellDuva ...

  10. 对SIL9022/9024的配置

    这里只是记录下对SIL9022.9024配置的I2C的数据,没有具体的程序.程序可以参考数据来做.程序官网也可能有. start of decoding Write to 0x72 0xBC ? 0x ...