gpt4 book ai didi

java - 如何通过socket发送HTTPS请求?

转载 作者:行者123 更新时间:2023-12-01 10:19:42 24 4
gpt4 key购买 nike

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

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

最佳答案

两个答案。

  1. 您正在尝试与 HTTPS 服务器通信。这需要您建立 SSL/TLS channel 。这在普通套接字上>>确实很难<<...您必须实现连接协商、 key 链的客户端验证、 session 加密/解密等等。

    更明智的方法是使用 SSLSocket、SSLSocketFactory 等来处理 SSL/TLS 内容……但这仍然有点棘手。

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

关于java - 如何通过socket发送HTTPS请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com