精华内容
下载资源
问答
  • java调用https接口

    千次阅读 2019-07-10 17:59:36
    http与https区别 https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式,用的...

    http与https区别

    https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    调用方式与步骤(这里使用跳过证书方式)

    MyX509TrustManager 类

    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    import javax.net.ssl.X509TrustManager;
    
    public class MyX509TrustManager implements X509TrustManager{
    
    	@Override
    	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public X509Certificate[] getAcceptedIssuers() {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    }
    
    

    HttpRequest类,这里只实现post请求

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    
    public class HttpRequest {
    	public static String sendPost(String url, String param) {
    		 PrintWriter out = null;
    	     BufferedReader in = null;
    	     String result = "";
    	     try {
    	    	 // 创建SSLContext对象,并使用我们指定的信任管理器初始化     
    	    	 TrustManager[] tm = { new MyX509TrustManager() }; 
    	    	 SSLContext sslContext = SSLContext.getInstance("SSL");
    	    	 sslContext.init(null, tm, new java.security.SecureRandom());
    	    	 
    	    	// 从上述SSLContext对象中得到SSLSocketFactory对象     
    	         SSLSocketFactory ssf = sslContext.getSocketFactory(); 
    	    	// 打开和URL之间的连接
    	    	URL realUrl = new URL(url);
    	    	HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
    	    	conn.setSSLSocketFactory(ssf);
    	    	// 设置通用的请求属性
    	    	conn.setRequestProperty("accept", "*/*");
    	    	conn.setRequestProperty("connection", "Keep-Alive");
    	    	conn.setRequestProperty("content-Type", "application/json");
    	    	conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    	    	// 发送POST请求必须设置如下两行
    	    	conn.setDoOutput(true);
    	    	conn.setDoInput(true);
    	    	// 获取URLConnection对象对应的输出流
    	    	out = new PrintWriter(conn.getOutputStream());
    	    	// 发送请求参数
    	    	out.print(param);
    	    	// flush输出流的缓冲
    	    	out.flush();
    	    	// 定义BufferedReader输入流来读取URL的响应
    	    	in = new BufferedReader(
    	    	new InputStreamReader(conn.getInputStream()));
    	    	String line;
    	    	 while ((line = in.readLine()) != null) {
    	    		 result += line;
    	    	}
    	    	System.out.println("-----result-----"+result);
    	    	} catch (Exception e) {
    	    		e.printStackTrace();	
    	    	} finally {// 使用finally块来关闭输出流、输入流
                    try {
                        if (out != null) {
                            out.close();
                        }
                        if (in != null) {
                            in.close();
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
    	     	return result;
    	   }
    }
    
    

    测试类

    public class Test {
    	public static void main(String[] args){ 
            String url = "访问地址";
            Map<String,Object> param = new HashMap<String,Object>();
    	    param.put("参数", "值");
    	    String message = JSONUtils.toJSONString(param);
            String str = HttpRequest.sendPost(url, message);
            System.out.println(str);
    	}
    }
    
    展开全文
  • 项目使用jdk1.7 调用Https接口报错: 异常java.net.SocketException: Connection reset 作者:橙味菌 链接:https://www.imooc.com/article/details/id/299109 来源:慕课网

    项目使用jdk1.7

    调用Https接口报错:java.net.SocketException:Connection reset

     

    最后确认异常原因为Https连接,接口调用端与服务端TLS版本不一致导致,

    接口调用端:JDK1.7默认使用TLS版本为TLSv1.0,也支持TLSv1.1,TLSv1.2

    接口提供端(服务端):JDK1.8默认使用TLSv1.2。

    SSLContext ctx=SSLContext.getInstance("TLS");

    改为:

    SSLContext ctx=SSLContext.getInstance("TLSv1.2");

    即解决!

     

    详细原因可参考:

    TLS版本不适配导致Connection reset问题

    https://www.imooc.com/article/details/id/299109

    展开全文
  • java调用https接口报错

    千次阅读 2016-10-31 17:03:49
    调用第三方https接口,在本地测试没问题,将项目提交到测试环境怎么都掉不通,报如下错误:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun....

    调用第三方https接口,在本地测试没问题,将项目提交到测试环境怎么都掉不通,报如下错误:

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.7.0_71]
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) ~[na:1.7.0_71]
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) ~[na:1.7.0_71]
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) ~[na:1.7.0_71]
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1439) ~[na:1.7.0_71]
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209) ~[na:1.7.0_71]
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878) ~[na:1.7.0_71]
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:814) ~[na:1.7.0_71]
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) ~[na:1.7.0_71]
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) ~[na:1.7.0_71]
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) ~[na:1.7.0_71]
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) ~[na:1.7.0_71]

    查了下大概就是说没证书,本地是在chrome浏览器上测试的,测试过程中一直没提示说要安装什么证书,也看了下本地的证书,……东西太多,一下子找不出到底本地在不知道的情况下安装了哪个证书,网上查了很多资料,有说在服务器上安装证书的,有说改代码的,最后解决的办法是创建CloseableHttpClient用了以下代码,https接口成功调用:

    public static CloseableHttpClient createSSLClientDefault(){
            try {
                SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                    //信任所有
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        return true;
                    }
                }).build();
                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
                return HttpClients.custom().setSSLSocketFactory(sslsf).build();
            } catch (KeyManagementException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (KeyStoreException e) {
                e.printStackTrace();
            }
            return  HttpClients.createDefault();
        }
    展开全文
  • 基于java调用https接口

    千次阅读 2015-08-07 16:04:26
    两种方式: 1:使用org.apache.http jar包:package ... import java.io.File; import java.nio.charset.Charset; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.

    两种方式:
    1:使用org.apache.http jar包:

    package com.XXXX.service;
    import java.io.File;
    import java.nio.charset.Charset;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.entity.ContentType;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    /*
     * 测试类(比较完善)
     * 测试Https接口 post
     *https接口的调用与http有些不同
     *  * apache官网可以下载最新的jar包和demo
     * http://hc.apache.org/downloads.cgi
     */
    public class TestSampleUpload4clientHttps {
     public static void main(String[] args) throws Exception {
      CloseableHttpClient closeableHttpClient = createHttpsClient();
      // 建立HttpPost对象 
      HttpPost httppost = new HttpPost("https://192.168.10.XXX:8443/XXXXX/XXXX/sampleUpload4client.action");
      // 配置要 POST 的数据begin 
      MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
      // 设置为浏览器兼容模式   
      multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);  
      // 设置请求的编码格式
      multipartEntityBuilder.setCharset(Charset.forName(HTTP.UTF_8));
      ContentType TEXT_PLAIN = ContentType.create("text/plain", Charset.forName(HTTP.UTF_8)); 
      multipartEntityBuilder.addTextBody("userName", "admin",TEXT_PLAIN);
      multipartEntityBuilder.addTextBody("psd", "admin",TEXT_PLAIN);
      multipartEntityBuilder.addTextBody("mac", "abw3232jjf2swsj3",TEXT_PLAIN);
      multipartEntityBuilder.addTextBody("md5", "uy0kfwefess8e6",TEXT_PLAIN);
      multipartEntityBuilder.addTextBody("type", "sample",TEXT_PLAIN);
      //文件路径
      File file = new File("D:\\glpt\\XXXXX.txt");
      multipartEntityBuilder.addBinaryBody("file", file);
      // 配置要 POST 的数据end
      // 生成 HTTP POST 实体
      HttpEntity httpEntity = multipartEntityBuilder.build();
      httppost.setEntity(httpEntity);
      //发送Post,并返回一个HttpResponse对象
      HttpResponse httpResponse = closeableHttpClient.execute(httppost);
      HttpEntity httpEntity2 = httpResponse.getEntity();
      System.out.println("httpResponse.getStatusLine().getStatusCode():"+httpResponse.getStatusLine().getStatusCode());
      // 如果状态码为200,就是正常返回
      if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
       String result = EntityUtils.toString(httpEntity2);
       // 得到返回的字符串
       System.out.println(result);
       // 如果是下载文件,可以用response.getEntity().getContent()返回InputStream
      }else {
       String result = EntityUtils.toString(httpEntity2);
       // 得到返回的字符串
       System.out.println(result);
      }
      //关闭连接
      closeableHttpClient.close();
    
     }
     public static CloseableHttpClient createHttpsClient() throws Exception   {
      X509TrustManager x509mgr = new X509TrustManager() {
       @Override
       public void checkClientTrusted(X509Certificate[] xcs, String string) {
       }
       @Override
       public void checkServerTrusted(X509Certificate[] xcs, String string) {
       }
       @Override
       public X509Certificate[] getAcceptedIssuers() {
        return null;
       }
      };
      SSLContext sslContext = SSLContext.getInstance("TLS");
      sslContext.init(null, new TrustManager[] { x509mgr }, new java.security.SecureRandom());
      SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
        sslContext,
        SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
      return HttpClients.custom().setSSLSocketFactory(sslsf).build();
     }
    
    }
    

    2.使用原生态java

    package com.XXXX.service;
    import java.io.ByteArrayOutputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.NoSuchProviderException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import org.apache.http.client.ClientProtocolException;
    /*
     * 测试类
     * 测试Https接口 post
     * 接收下属客户端上传样本,保存样本文件
     */
    public class TestSampleUpload4clientHttps2 {
     private static class TrustAnyTrustManager implements X509TrustManager {
      public void checkClientTrusted(X509Certificate[] chain, String authType)
        throws CertificateException {
      }
      public void checkServerTrusted(X509Certificate[] chain, String authType)
        throws CertificateException {
      }
      public X509Certificate[] getAcceptedIssuers() {
       return new X509Certificate[] {};
      }
     }
     private static class TrustAnyHostnameVerifier implements HostnameVerifier {
      public boolean verify(String hostname, SSLSession session) {
       return true;
      }
     }
     /**
      * post方式请求服务器(https协议)
      * 
      * @param url
      *            请求地址
      * @param content
      *            参数
      * @param charset
      *            编码
      * @return
      * @throws NoSuchAlgorithmException
      * @throws KeyManagementException
      * @throws IOException
      * @throws NoSuchProviderException
      */
     public static byte[] post(String url, String content, String charset)
       throws NoSuchAlgorithmException, KeyManagementException,
       IOException, NoSuchProviderException {
      try {
       TrustManager[] tm = { new TrustAnyTrustManager() };
       // SSLContext sc = SSLContext.getInstance("SSL");
       SSLContext sc = SSLContext.getInstance("SSL", "SunJSSE");
       sc.init(null, tm,new java.security.SecureRandom());
       URL console = new URL(url);
    
       HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
       conn.setSSLSocketFactory(sc.getSocketFactory());
       conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
       conn.setDoOutput(true); 
       conn.setDoInput(true);  
       conn.setRequestMethod("POST");
       conn.connect();
       DataOutputStream out = new DataOutputStream(conn.getOutputStream());
       out.write(content.getBytes(charset));
       // 刷新、关闭
       out.flush();
       out.close();
       InputStream is = conn.getInputStream();
       if (is != null) {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = is.read(buffer)) != -1) {
         outStream.write(buffer, 0, len);
        }
        is.close();
        return outStream.toByteArray();
       }
      } catch (KeyManagementException e) {
       e.printStackTrace();
      }catch (NoSuchAlgorithmException e) {
       e.printStackTrace();
      }catch (NoSuchProviderException e) {
       e.printStackTrace();
      }catch (IOException e) {
       e.printStackTrace();
      }
    
    
    
      return null;
     }
    
     public static void main(String[] args) throws ClientProtocolException,IOException {
      try {
       post("https://192.168.100.203:8443/xxxxxxx/sample/sampleUpload4client.action","aaaaaaaaaaaaaaa","UTF-8");
      } catch (KeyManagementException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (NoSuchAlgorithmException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (NoSuchProviderException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    
    }

    http://blog.csdn.net/henryzhang2009/article/details/38691415

    展开全文
  • java调用https接口,并传参

    千次阅读 2019-07-23 15:53:25
    -- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <groupId>org.apache.httpcomponents <artifactId>httpclient <version>4.5.8 <!-- ...
  • 首先需要获取到证书文件。 然后,将证书导入到本地: keytool - ... -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore ...转载于:https://www.cnblogs.com/at0x7c00/p/8352079.html
  • Java调用https接口get方法,无证书

    千次阅读 2018-09-12 10:35:46
    1.工具类 package springmvc.wx.controller....import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import javax...
  • java如何调用https接口

    千次阅读 2019-03-29 11:38:19
    import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; public c...
  • Java 调用Http和Https接口

    千次阅读 2019-08-09 16:44:21
    Java调用Http接口Https接口 大多数我们调用的接口都是Http的,很少有Https接口,近期做了个项目就用到和Https接口的请求调用,和大家分享一下心得。Http接口Https接口主要是区别还是Https存在一个证书验证。...
  • Java调用第三方接口示范

    万次阅读 多人点赞 2018-10-08 15:03:53
    人工智能,零基础入门!...【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】: pa...
  • java调用外部接口

    万次阅读 2016-11-16 09:50:29
    Java调用外部接口的方法,最终返回接口return的信息 String strURL = "这里是你要调用的接口"; URL url = new URL(strURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); ...
  • java调用http接口

    千次阅读 2018-07-10 14:51:00
    因为之前没有做过“java调用http接口”类似功能,所以在网上找了很多,也比较久。如下代码感觉比较可以,使用过程中也没出什么问题,所以就记录了下来。 代码如下:package com.zhang.miaodou; import java.io.Bu.....
  • Java调用SAP接口

    2019-05-13 11:16:24
    Java调用SAP接口方式有2种: 1.调用SAP的RFC接口 需要用到jco包 sapjco.jar,sapjco.dll文件,linux需要.so文件 2.调用SAP的WebService接口
  • java调用HTTP接口(Get请求和Post请求)

    万次阅读 多人点赞 2018-09-14 16:43:27
    前提: 一个Http接口:http://172.83.38.209:7001/NSRTRegistration/test/add.do?id=8888888&...java代码调用Http接口代码如下(代码中注释分为两部分:处理get请求和post请求): package com.inspur.OKHTTP...
  • JAVA调用远程接口

    千次阅读 2019-12-30 16:11:36
    JAVA调用远程接口 介绍一下JAVA调用远程接口获取数据。一般业务中主要用到的就是get和post的方式。其他的方式,以后用到了,再补充。 啰嗦一下get和post方式不同点.如果只说使用功能,那么下面几句话就够了,如果要...
  • JAVA 调用外部接口

    万次阅读 2020-08-04 08:57:25
    系统需要调用guo wai一个接口,由于调用的guowai接口,需要通过proxy请求 现在有3个方案 1.使用proxy进行http请求 2.直接使用guo wai服务器部署项目 3.使用HK服务器作为中介获取返回数据 1:问题,代理不稳定 2:...
  • 通过httpclient的get post方式调用http很常见。一般都是 ...但是如果要调用https这个方式就不行了。就要修改DefaultHttpClient <dependency> <groupId>org.apache.httpcomponents</gro
  • Java 调用底层接口

    千次阅读 2013-10-31 09:43:38
    Java调用动态库所需要关心的问题:  如何装载文件,以及如何定位所要使用的方法;  数据类型是如何对应的;  如何给使用的方法传递参数;  如何获取返回的值。 目前调用底层接口用的比较多的技术包括jni...
  • Java调用外部接口

    万次阅读 2018-08-03 15:18:15
    进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 使用接口的方式没有想象的那么难。 比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 如果是一个POST接口,...
  • JAVA调用Webservice接口Demo

    热门讨论 2013-05-09 14:55:13
    JAVA调用Webservice接口Demo 直接上代码,下载下来可直接运行看到效果 1,IP查询 2,根据省份查城市
  • java调用webservice接口 几种方法

    万次阅读 2016-12-06 14:34:03
    java调用webservice接口 几种方法
  • 本篇文章主要介绍了JAVA利用HttpClient进行HTTPS接口调用的方法,具有一定的参考价值,有兴趣的可以了解一下
  • 有些https接口,用retrofit+okhttps调用会报错:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor ...解决方法是在每次调用接口前调用以下方法: import java....
  • java调用webservice接口500错误

    万次阅读 2016-03-22 16:12:29
    java调用webservice接口500错误
  • java调用webservice接口(.asmx)该系统提供了webservice接口。现在把记录一下,方便自己以后用,说不定也能帮到正在看这篇文档的你。 首先需要确认,我这边写的是java后台直接调用webservice接口,并且接口后缀为...
  • 使用 Https 调用 https 接口

    千次阅读 2017-07-20 20:25:05
    最近公司让用 Java 调用一个国外的接口,打开文档一看 要使用 https 调用 https 接口。弄了几天终于弄的差不多了。首先配置本地单向 https1.生成安全证书(个人学习可以使用工具生成,而如果是公司的则另当别论了) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,344,510
精华内容 537,804
关键字:

java怎么调用https的接口

java 订阅