基于java调用https接口

两种方式:
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();
  }
 }
 
}



  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java发送HTTPS请求进行远程调用,可以使用HttpURLConnection或HttpClient来实现。下面以HttpURLConnection为例来说明: 1. 首先,需要导入相关的包,例如java.net包中的HttpURLConnection类。 2. 创建一个URL对象,指定要发送请求的URL地址。 3. 调用URL对象的openConnection()方法,返回一个HttpURLConnection对象。 4. 设置请求方法为POST或GET,根据具体需求。 5. 如果是发送POST请求,需要设置请求头和请求体。 6. 调用connect()方法建立连接。 7. 获取响应码和响应消息,可以用getResponseCode()和getResponseMessage()方法。 8. 通过getInputStream()方法获取响应内容。 下面是一个示例代码,展示了如何使用Java发送HTTPS请求远程调用: ```java import java.net.HttpURLConnection; import java.net.URL; import java.io.BufferedReader; import java.io.InputStreamReader; public class HttpsRequestExample { public static void main(String[] args) { try { // 创建URL对象 URL url = new URL("https://example.com/api"); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为POST或GET connection.setRequestMethod("POST"); // 设置请求头 connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Authorization", "Bearer token"); // 设置请求体(如果有) String requestBody = "{\"param1\":\"value1\",\"param2\":\"value2\"}"; connection.setDoOutput(true); connection.getOutputStream().write(requestBody.getBytes("UTF-8")); // 建立连接 connection.connect(); // 获取响应码和响应消息 int responseCode = connection.getResponseCode(); String responseMessage = connection.getResponseMessage(); // 获取响应内容 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } // 关闭连接 connection.disconnect(); // 输出结果 System.out.println("Response Code: " + responseCode); System.out.println("Response Message: " + responseMessage); System.out.println("Response Body: " + response.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 这是一个使用HttpURLConnection发送HTTPS请求的示例代码。你可以根据具体的需求进行修改和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [service_java接口远程调用_get、post、带参数远程调用_](https://download.csdn.net/download/weixin_42683392/26326943)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JAVA发送http get/post请求,调用http接口、方法详解](https://download.csdn.net/download/weixin_38688969/12749566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python实现基于人脸识别的上课考勤系统.zip](https://download.csdn.net/download/2302_77835532/88237252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值