我正在尝试编写一个简单的 Java 服务器,它从 Web 浏览器接收 HTTP GET 请求并发回一些数据。所有通信都通过套接字完成。
我能够处理请求,现在我正在尝试使用 BASIC AUTH 实现简单的身份验证,因此只有在请求 header 中提供正确的凭据时才会处理某些请求。为了简单起见,我只使用 http 协议(protocol)(而不是 https)。不过,我不确定如何访问 header 并读取服务器上的凭据:
服务器在本地主机上运行,端口 9000,这是我尝试处理的示例 URL:
http://user:password@localhost:9000/files/text?tid=file3
我打开套接字并读取所有内容:
InputStream input = clientSocket.getInputStream();
// Reading line by line with a BufferedReader
java.io.BufferedReader in = new java.io.BufferedReader(new String line;
while (!(line = in.readLine()).equals("")) {
System.out.println(line);
}
这是我得到的:
GET /files/text?tid=file3 HTTP/1.1
Host: localhost:9000
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
我在 URL 中输入的身份验证凭据没有踪迹,因此我不确定如何解析请求。你能告诉我我在这里缺少什么吗?
我知道这个例子非常简单,还有更聪明的方法来实现它,但我很好奇如何在这个简单的模型案例中访问这些凭据。
最佳答案
使用类似 curl
的客户端:
$ curl -v -u user:password "http://localhost:9000/files/text?tid=file3"
由于 HTTP 是无状态的,发送 Authentication
header 就足够了。这就是 curl
所做的。无需等待服务器返回 401
。
关于java - 通过套接字从浏览器到服务器的基本 http 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29603666/