如何使用Apache HttpComponents从Java Socket获取HTTP请求

时间:2014-06-23 11:19:03

标签: java sockets http apache-httpcomponents

我的简单服务器有一个ServerSocket对象,可以侦听端口并接受套接字。

Socket socket = serverSocket.accept();

一旦我有了这个套接字,我怎么把它变成一个HttpRequest对象,所以我可以轻松确定套接字正在寻找的域?

3 个答案:

答案 0 :(得分:3)

套接字位于网络堆栈的完全不同的层上,而不是http请求。 所以你不能只是将一个套接字“转”成一个http请求。 见http://en.wikipedia.org/wiki/OSI_model - >套接字在第4层运行,http请求将在第7层。

套接字是处理网络通信的工具。这不一定是http,但可以是任何东西(例如ftp或专有协议)。 套接字只会给你一个数据流,你必须解释。

我建议你使用apache http-components(http://hc.apache.org/)之类的东西来获取webserver-stuff。有很多框架可以满足您的需求,而不是自己实现它。

答案 1 :(得分:0)

我的朋友,你必须从套接字读取数据,解析它,并确定它是否符合http协议,然后创建httprequest,你可以转发给任何需要它的人。这已经在诸如jetty或tomcat

之类的服务器中为您完成了

答案 2 :(得分:0)

我找到了一种有效的方法:

    Socket serverSoc = srvSocket.accept();
    DefaultHttpServerConnection serverConn = null;
    try {
        HttpParams params = new BasicHttpParams();
        serverConn = new DefaultHttpServerConnection();
        serverConn.bind(serverSoc, params);
        HttpRequest request = serverConn.receiveRequestHeader();
   }