我需要握手。我用下面的代码来做。
我在小程序中运行代码,直接针对服务器运行时它工作正常。当相同的代码通过代理运行时,就会出现我遇到的问题。我正在查看激活了跟踪级别 5 的 Java 控制台。直接在代码行“SSLSocket socket = (SSLSocket) factory.createSocket("www.theserver.com", 443);"之后 执行此行出现在 java 控制台“network: Connecting http://www.theserver.com:443 with proxy=DIRECT”中。在此之后,小程序停止工作。我认为这是因为代理不允许端口 443 上的 http 流量。
谁能告诉我为什么它使用http连接以及我应该怎么做才能让它使用https连接?
import javax.net.ssl.HandshakeCompletedEvent;
import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
public class Handshake
{
class MyHandshakeListener implements HandshakeCompletedListener
{
public void handshakeCompleted(HandshakeCompletedEvent e)
{
System.out.println("Handshake succesful!");
System.out.println("Using cipher suite: " + e.getCipherSuite());
}
}
public void DoHandshake()
{
try
{
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("www.theserver.com", 443);
String[] suites = socket.getSupportedCipherSuites();
socket.setEnabledCipherSuites(suites);
socket.addHandshakeCompletedListener(new MyHandshakeListener());
socket.startHandshake();
}
catch (Exception e)
{
System.out.println(e);
}
}
}