C盘满了怎么弄:HTTP请求充满了垃圾(junk and java)

我一直在研究 java 中的简单 http 服务器。当我尝试通过 google 浏览器发送一些 http 请求时,“line”变量应该有请求字符串,但它有垃圾字符。
你知道是什么导致了这个问题吗?
代码来自本教程:https://www..com/watch?v=FqufxoA4m70&t=2061s&ab_channel=BloomInstituteofTechnology

这里是代码的一部分,你可以找到这个问题。

package com.company;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public cl Main
{
    public static void main(String[] args) throws Exception
    {
        try( ServerSocket socketServer = new ServerSocket(8080))
        {
            System.out.println("Server created");
            while (true)
            {
                try (Socket client = socketServer.accept())
                {
                    System.out.println(" connected: " + client.toString());
                    InputStreamReader isr = new InputStreamReader(client.getInputStream());
                    BufferedReader br = new BufferedReader(isr);
                    StringBuilder request = new StringBuilder();
                    String line;
                    line = br.readLine();
                    while(!line.isBlank())
                    {
                        request.append(line);
                        line = br.readLine();
                    }
                }
            }
        }
    }
1

我不知道你实际上在用你的浏览器做什么。你在 URL 栏中输入什么?如果你试图使用 https 而不是 http 它将无常工作。也许“google 浏览器”在欺骗你,在背后做东西...不完全发送简单的 HTTP 获取

这是不完美的,但至少所有的 IO 流已正确关闭,并将虚拟响应发送到客户端(否则将保持挂起)。

通过在浏览器中输入 http:/ / localhost:8080 / some-random-url 来尝试它。我不能尝试使用 chrome,因为我不使用它,但这可以使用 Firefox。作为一项规则,我会用curl而不是浏览器来测试这样的东西-在测试简单的东西时,你有更多的控制权。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.cht.StandardChts;
public cl Main {
    public static void main(String[] args) throws Exception {
        try (ServerSocket socketServer = new ServerSocket(8080)) {
            System.out.println("Server created");
            while (true) {
                try (Socket client = socketServer.accept()) {
                    System.out.println(" connected: " + client.toString());
                    try (final InputStream is = client.getInputStream();
                         final InputStreamReader isr = new InputStreamReader(is);
                         final BufferedReader br = new BufferedReader(isr);
                         final OutputStream os = client.getOutputStream()) {
                        final StringBuilder request = new StringBuilder();
                        String line;
                        while (!(line = br.readLine()).isBlank()) {
                            request.append(line).append("\n");
                        }
                        System.out.println("+++++++++++++++++++++++ REQUEST ");
                        System.out.println(request);
                        String response = "HTTP/1.1 200 OK\r\n" +
                                "Content-Type: text/plain\r\n" +
                                "Connection: closed\r\n" +
                                "\r\n" +
                                "Hello there!\r\n";
                        os.write(response.getBytes(StandardChts.UTF_8));
                        os.flush();
                        System.out.println("----------------------- RESPONSE ");
                        System.out.println(response);
                    }
                }
            }
        }
    }
}

随机备注:不要自己实现 HTTP 服务器。只是为了了解它的工作原理。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(521)
大众cc日行灯:选择日期为工作日的行(what is a weekday)
上一篇
电脑网页突然打不开怎么回事:MSVCRDLL是怎么回事
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(88条)