1

嗨,我正在运行一个用 java 创建的服务器套接字,它接受来自客户端的请求,该客户端使用 HTTP url 连接和发送 Web 请求。

客户这样做:

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

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

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

4

4 回答 4

2

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

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

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

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

HTTP Headers for Dummies”网页也是对 HTTP headers 的一个很好的介绍

于 2013-07-02T14:30:08.613 回答
1

是的,有可能得到String但不是你可能想要的方式。

您可以实现 HTTP-Server(参见RFC 2616)。但很可能你不想要这个。

您还可以使用ServletTomcat 或 Jetty 之类的容器并编写一个Servlet使用 HTTP。有了这个,Servlet容器完成了所有的协议,你可以专注于做业务逻辑。

于 2013-07-02T14:20:38.003 回答
1

当您声明您正在构建代理时,您已经在问错误的问题。

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

  1. 从客户那里读到这一行。
  2. 连接到命令中指示的目标。
  3. 回复成功或失败。
  4. 如果成功,开始双向复制字节。

但是我不知道为什么当已经有几十个免费的工作代理存在时,你为什么还要实现一个 HTTP 代理。

于 2013-07-03T01:31:48.373 回答
-3

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

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

希望能帮助到你。

于 2013-07-02T14:36:01.843 回答