如何通过套接字发送HTTPS请求?

特鲁坚

我正在学习Java套接字。我正在尝试向Facebook发送HTTPS GET请求,如下所示:

String request = "GET / HTTP/1.0\r\n"
                + "Host: www.facebook.com\r\n"
                + "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0\r\n"
                + "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n"
                + "Accept-Language: de,en;q=0.7,en-us;q=0.3\r\n"
                + "Accept-Encoding: gzip\r\n"
                + "Connection: close\r\n\r\n";
byte[] Outdata = request.getBytes();
Socket server = new Socket("www.facebook.com", 443);
DataOutputStream outputStream = new DataOutputStream(server.getOutputStream());
outputStream.write(Outdata);
outputStream.flush();

然后,我尝试侦听来自服务器的传入数据,如下所示:

 DataInputStream inputStream =
     new DataInputStream(server.getInputStream());    
 byte[] InData = new byte[1024];

 while (true) {
     inputStream.read(InData);
     String data = new String(InData, StandardCharsets.UTF_8);
     System.out.println(data);
 }

但是我没有从服务器获得任何返回数据。为什么?

斯蒂芬·C

两个答案。

  1. 您正在尝试与HTTPS服务器通信。这就需要您建立一个SSL / TLS通道。这在纯套接字上确实很难>>您必须实现连接协商,密钥链的客户端验证,会话加密/解密等。

    一种更合理的方法是使用SSLSocket,SSLSocketFactory等来处理SSL / TLS内容……但是它仍然有些棘手。

  2. 通过套接字与HTTP或HTTPS服务进行通信不是明智的方法。这样做并不会真正让您学到很多东西,因为从Java与HTTP / HTTPS服务进行通讯正常方式是使用HttpURLConnection,如果需要更多控制,也可以使用Apache HTTP库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章