当前位置: 首页 > 面试题库 >

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

史昊焱
2023-03-14
问题内容

我正在学习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通道。这在纯套接字上确实很难>>您必须实现连接协商,密钥链的客户端验证,会话加密/解密等。

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

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


 类似资料:
  • 问题内容: 当我通过套接字发送正常的HTTP请求时,服务器不会以OK响应进行响应。我从Firefox复制了HTTP标头。这是代码: 但是,这是我收到的回复: 我知道我可以使用来做到这一点,但是当我手动发送HTTP请求时,服务器为什么不识别HTTP请求? 问题答案: 两件事情: 您应该使用而不是将条目打印到单独的行。 HTTP请求应以空白行(link)结尾。所以加

  • 问题内容: 您好,我尝试使用Java中的客户端-服务器类发送文件。由于某种原因,当调用发送文件的方法时,套接字关闭。这是代码: 和来自客户端的代码: 和我得到的错误消息:严重:null java.net.SocketException:套接字已关闭 我对此并没有真正的经验,所以如果有帮助的话会很棒。 问题答案: 该方法返回一个,代表它实际读取的字节数。不能保证从字节数组中读取所需的字节数。它通常会

  • 我正试图通过Java的socket发送一个custome对象。我知道我需要将具有我需要发送的对象的类放在相同的包中,具有相同的serialVersionUID并实现Serializable。我已经这样做了,但我仍然不能通过套接字发送对象。我错在哪里了? 以下是客户端代码: 客户端中的类用户 发送user类对象的代码: 这里是服务器的代码: user类的代码:与客户端的user完全相同(我从客户端复

  • 问题内容: 我有两个脚本,Server.py和Client.py。我有两个目标: 为了能够一次又一次地从客户端向服务器发送数据。 为了能够将数据从服务器发送到客户端。 这是我的Server.py: 这是我的客户: 该函数首次运行(“ e”进入服务器,我返回返回消息),但是如何使它一遍又一遍地发生(类似于聊天应用程序)?该问题在第一次之后开始。消息不会在第一次之后发送。我究竟做错了什么?我是pyth

  • 我有一个问题,然后通过套接字发送列表,它必须是字节样的对象,好吧,我可以转换它字符串,然后做,但问题是字符串,这是很难重建它 列表从字符串,和从库 没有工作,然后我有这样的东西: 这就是问题所在,我必须拥有这些对象,我的问题是如何发送python对象而不需要将其转换为字符串,或者类似于JSON之类的对象符号? 这可以通过Python套接字文档在基本套接字服务器上进行测试。 失败的文本评估: 错误:

  • 问题内容: 我正在尝试使用HttpsUrlConnection类将请求发送到服务器。服务器存在证书问题,因此我设置了一个可信任所有内容的TrustManager以及同样宽松的主机名验证程序。当我直接发出请求时,此管理器工作正常,但是当我通过代理发送请求时,似乎根本没有使用过。 我这样设置代理设置: 默认SSLSocketFactory的TrustManager的设置如下: 如果运行以下代码,则最终