时间:2019-10-07
概述:Web服务器
java 使用Https 与Web 服务器通信,在 SSL 安全机制下我们经常用到Https 与Web 服务器通信。本例通过编程实现了连接一个安全的HTTP 服务器,发送一个简单的Get 请求,并打印出响应这样的简单通信功能。运行程序,运行此程序后本机连接一个安全的HTTP 服务器,发送Get 请求,并打印出响应这样的简单通信信息。
实现方法如下:使用 createSocket()方法从javax.net.ssl.SSLSocketFactory 类中构造一个java.net.Socket 对象。使用如下5 个重载的createSocket()方法来构建一个SSSLSocket 对象:
public abstract Socket createSocket(String host, int port)
throws IOException, UnknownHostException
public abstract Socket createSocket(InetAddress host, int port)
throws IOException
public abstract Socket createSocket(String host, int port,InetAddress interface, int localPort)
throws IOException, UnknownHostException
public abstract Socket createSocket(InetAddress host, int port,InetAddress interface, int localPort)
throws IOException, UnknownHostException
public abstract Socket createSocket(Socket proxy, String host, int port,boolean autoClose)
throws IOException
所有这些构造方法返回的都是javax.net.ssl.SSLSocket。程序代码编写如下:
1.编写HTTPSClient 类的基本框架,该类仅包括main()方法,在该方法中使用Https 与Web服务器通信。
2.编写HTTPSClient 类,代码如下:
import java.net.*;
import java.io.*;
import java.security.*;
import javax.net.ssl.*;
public class HTTPSClient
{
public static void main(String[] args)
{
if (args.length == 0)
{
System.out.println("Usage: java HTTPSClient host");
return;
}
int port = 443; // Https 的缺省服务端口
String host = args[0];
try
{
// 建立支持SSL的Socket工场
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
// 建立支持SSL的Socket
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
// 允许访问所有支持的站点
String[ ] supported = socket.getSupportedCipherSuites();
socket.setEnabledCipherSuites(supported);
// 在SSL上建立指向服务器的输出流
Writer out = new OutputStreamWriter(socket.getOutputStream());
// 通过Https构造并且发送一个完整的http请求
out.write("GET http://" + host + "/ HTTP/1.1\r\n");
out.write("\r\n");
out.flush();
// 取回响应
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
int c;
while ((c = in.read()) != -1)
{
System.out.write(c);
}
// 关闭连接
out.close();
in.close();
socket.close();
}
catch (IOException e)
{
System.err.println(e);
}
}
}