我一直在研究 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();
}
}
}
}
}
我不知道你实际上在用你的浏览器做什么。你在 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 服务器。只是为了了解它的工作原理。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(88条)