用Https發送訊息的測試代碼

來源:互聯網
上載者:User

發送類:

import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.GeneralSecurityException;
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.X509TrustManager;

import com.cltc.adapter.ce.CommunicationToken;

/**
 * <p>Description:通過Https發送訊息</p>
 */
public class DataSender
{
  private final static String HTTPS_TRANSMIT_LOCATION = "HTTPS Transmitter";
  //重寫X509TrustManager類的三個方法,信任伺服器憑證
  private X509TrustManager xtm = new X509TrustManager() {
   public void checkClientTrusted(X509Certificate[] chain, String authType) {}

   public void checkServerTrusted(X509Certificate[] chain, String authType) {}

   public X509Certificate[] getAcceptedIssuers() { return null; }
  };
  //信任主機
  private HostnameVerifier hnv = new HostnameVerifier() {
   public boolean verify(String hostname, SSLSession session) { return true; }
  };
  //構造初始化SSLContext
  public DataSender() {
  
   SSLContext sslContext = null;

   try {
    sslContext = SSLContext.getInstance("TLS");
    X509TrustManager[] xtmArray = new X509TrustManager[] { xtm };
    sslContext.init(null, xtmArray, new java.security.SecureRandom());
   } catch(GeneralSecurityException gse) {
    System.out.println("Https:DataSender:General Security Exception .");
    gse.getStackTrace();
   }

   if(sslContext != null) {
    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
   }

   HttpsURLConnection.setDefaultHostnameVerifier(hnv);
  }
 
  /**
   *  通過HTTPS發送訊息
   */
  public int sendMessage( CommunicationToken ct ) throws MalformedURLException, IOException
  {
 //System.setProperty("javax.net.debug","true");
 URL remoteHostURL;
 HttpsURLConnection httpsUrlConnection = null;
 
 //建立串連
 try
 {
   remoteHostURL = new URL( ct.getRemoteHostURI() );
   System.out.println( ct.getRemoteHostURI());
   httpsUrlConnection = (HttpsURLConnection)remoteHostURL.openConnection();
 }
 catch(  Exception _ex )
 {
   System.out.println( "Unable to openConnection on URL." );
   _ex.printStackTrace();
 }
 
 byte[] Msg = ct.getMessage();

 HttpsURLConnection.setFollowRedirects( true );
 httpsUrlConnection.setInstanceFollowRedirects( true );

 httpsUrlConnection.setDoOutput( true );
 httpsUrlConnection.setDoInput( true );

 httpsUrlConnection.setRequestMethod( "POST" );

 httpsUrlConnection.setRequestProperty( "Content-length", Integer.toString( Msg.length ) );
 httpsUrlConnection.setRequestProperty( "Content-type", "application/x-xxxxxxxx; version=1.0" );
 httpsUrlConnection.connect();
 OutputStream outStream = null;
 try
 { 
   outStream = httpsUrlConnection.getOutputStream();
   outStream.write( Msg );
   outStream.flush();
 }
 finally
 {
   if( outStream != null )
   {
  outStream.close();
   }
 }

 int responseCode = httpsUrlConnection.getResponseCode();
 System.out.println( "Https_DataSender:" + responseCode );
 return responseCode;
  }
}

-----------------------------------------------------------------------------------------------------------------------

Servlet接收:

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cltc.adapter.ce.CommunicationToken;
import com.cltc.adapter.ce.http.DataReceiver;

/**
 * HTTP-SSL Receiver servlet.
 */
public class HttpSSLPostReceiver_v11  extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

   PrintWriter out = res.getWriter();
   out.println("<HTML>");
   out.println("<BODY>");
   out.println("<BR>You have performed an HTTPS GET on this URL. <BR>");
   out.println("To submit a message, you must POST the message to this URL <BR>");
   out.println("</BODY>");
   out.println("</HTML>");
  }

  public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{

    System.out.println("Receive file via Https.");
    int responseFromPSC;
    byte Message[] = new byte[req.getContentLength()];

    InputStream ThisStream = req.getInputStream();

    for(int BytesRead = 0,Offset = 0;BytesRead != -1;Offset += BytesRead)
    {
   BytesRead = ThisStream.read(Message,Offset,1000);
    }

    responseFromPSC=callHttpReceiver(res, Message);
  }

   public int callHttpReceiver(HttpServletResponse res, byte[] Message) {
  
    CommunicationToken ct = new CommunicationToken();
    int responseFromPSC;
    ct.setRNMessage(Message);
    ct.setVersion(1);
    responseFromPSC = 500;
    DataReceiver.getInstance().receiveMessage( ct );
    return responseFromPSC;
  }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.