【问题标题】:How to get HTTP response through socket in java?java中如何通过socket获取HTTP响应?
【发布时间】:2009-09-02 19:13:15
【问题描述】:

我已经编写了一个代码来通过 java 中的套接字发送 HTTP 请求。现在我想获取我向其发送 HTTP 请求的服务器发送的 HTTP 响应。

【问题讨论】:

    标签: java http sockets httprequest


    【解决方案1】:

    您的要求并不完全清楚。假设您已将请求写入套接字,接下来您要做的是:

    • 在套接字上调用shutdownOutput() 告诉服务器请求已完成(如果您已发送内容长度,则不需要)
    • 从socket的输入流中读取响应,根据HTTP spec解析。

    这是一堆工作,所以我建议不要使用自己的 HTTP 请求逻辑,而是使用 Java 内置的 URLConnection,它包括检索响应内容的方法以及任何由服务器设置的标头。

    【讨论】:

    • +1 表示“不要自己做这个”。 (当然,如果您发送了内容长度,则无需关闭输出。)还有其他可用的库。具有讽刺意味的是,OP 昨天询问了他们,​​所以我不确定他们为什么现在将请求直接写入套接字......
    • 当然。我自己用 C++ 做过一次,这绝对不好玩。不是火箭科学,但也不好玩。
    【解决方案2】:

    正如 Jon 所说,请阅读 HTTP 规范。但是 Internet 协议通常是面向行的,因此您可以一次读取一行响应。第一行将是响应。紧随其后的是标题,每行一个(除非有延续)。如果有一个正文,其中一个标题将是内容类型,这将告诉您内容是什么。如果您想阅读内容,您需要了解发送内容的不同方式。可能有内容长度标题(或没有)或者内容可能被分块(不记得我头顶的标题)。当然,内容可能是二进制而不是文本。

    【讨论】:

      【解决方案3】:

      是的! 没错!

      响应应该被输入流清楚地读入 几块字节...... 因此我们可以将其翻译成可读的格式。 但这也需要更长的时间.... :(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多