如何从套接字中找出url请求?

时间:2013-07-02 14:15:44

标签: java sockets

您正在运行在java中创建的服务器套接字,该套接字接受来自使用HTTP网址连接和发送Web请求的客户端的请求。

客户端执行此操作:

URLconnection.opeonConnection(new Url(www.hello.com/hi));

在我的服务器套接字上,它检索一个Socket对象。

是否可以检索传递给此套接字连接的网址www.hello.com/hi url?

4 个答案:

答案 0 :(得分:2)

可能通过解析客户端的HTTP头:

你可以通过一些工作获得“/ hi”部分。 URL Connection类将使用HTTP协议提交一些HTTP头,以及GET请求为“GET / hi HTTP / 1.1”。 “/ hi”部分来自URL。

“www.hello.com”部分可能更难。浏览器将在“Host:”标头中提供URL的主机和端口(如果给出端口)部分。您的网络基础结构可能包含将请求转发到最终后端服务器的代理或负载平衡器,如果代理配置不正确,它们将不会维护原始主机头。如果它没有按预期工作,请自行尝试并与网络管理员交谈。

如果您想查看网址连接类将发送到您的服务器的内容,您可以通过将浏览器指向此网址来了解相关信息:http://request.urih.com/。 “请求标头:原始源”部分显示HTTP客户端(您的浏览器)发送的HTTP标头。

"HTTP Headers for Dummies"网页也是对HTTP标头

的一个很好的介绍

答案 1 :(得分:1)

是的,有可能获得String但不是您想要的方式。

您可以实施HTTP服务器(请参阅RFC 2616)。但很可能你不想要这个。

您还可以使用Servlet容器(如Tomcat或Jetty)并编写Servlet以使用HTTP。有了这个,Servlet容器就完成了所有协议,你可以专注于做业务逻辑。

答案 2 :(得分:1)

当你说你正在建立一个代理时,你已经提出了错误的问题。

HTTP代理只需要处理一个命令:CONNECT命令。你只需要:

  1. 从客户端读取这一行。
  2. 连接到命令中指示的目标。
  3. 回复成功或失败。
  4. 如果成功,则开始双向复制字节。
  5. 但我不知道你为什么甚至在已经存在数十个免费工作的情况下实现HTTP代理。

答案 3 :(得分:-3)

在接口Socket中有getRemoteSocketAddress()。它返回一个SocketAddress,如果SocketAddress的实现是InetSocketAddress,请尝试调用getHostString()。

SocketAddress address =yourSocket.getRemoteSocketAddress().
String address=((InetSocketAddress)address).getHostString();

希望它有所帮助。