【问题标题】:How to send an HTTPS request by socket?如何通过套接字发送 HTTPS 请求?
【发布时间】:2016-02-28 06:47:49
【问题描述】:

我正在学习 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);
 }

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

【问题讨论】:

  • 如果您想讨论 SSL/HTTPS,您可能需要SSLSocket

标签: java facebook sockets http request


【解决方案1】:

两个答案。

  1. 您正在尝试与 HTTPS 服务器通信。这需要您建立 SSL/TLS 通道。这在普通套接字上>>真的很难

    更理智的方法是使用 SSLSocket、SSLSocketFactory 等来处理 SSL/TLS 的东西……但它仍然有点棘手。

  2. 通过 Socket 与 HTTP 或 HTTPS 服务通信不是明智的方法。这样做你并不会真正学到很多东西,因为从 Java 与 HTTP / HTTPS 服务通信的正常方法是使用HttpURLConnection,或者如果你想要更多控制权,可以使用 Apache HTTP 库.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多