【问题标题】:How to get the response content of an HTTP 404 response如何获取 HTTP 404 响应的响应内容
【发布时间】:2013-07-23 15:29:44
【问题描述】:

有没有比通过 tcp 直接访问主机更简单的方法来获取 HTTP 404 响应的内容?

这是一个带有内容的 404 响应示例:

HTTP/1.1 404 Object Not Found
Server: CouchDB/1.3.0 (Erlang OTP/R15B03)
Date: Wed, 24 Jul 2013 08:32:50 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 41
Cache-Control: must-revalidate

{"error":"not_found","reason":"missing"}

【问题讨论】:

    标签: http rest http-status-code-404 rebol


    【解决方案1】:

    Rebol HTTP 方案在设计时并没有考虑到这一点,它旨在以您在浏览器中的方式阅读内容,而不是通过 HTTP 提供服务。

    也就是说,你可以破解协议来颠覆 Rebol 2 处理不同响应代码的方式:

    in-http-scheme: func [does [block!]][
        do bind :does bind? last body-of get in system/schemes/http/handler 'open
    ]
    
    in-http-scheme [
        remove-each [code response] response-actions [find [400 403 404] code]
        append response-actions [400 success 403 success 404 success]
    ]
    

    这里需要注意的是,HTTP 协议必须已经启动(任何打开/读取的 http 端口)。 response-actions 在 http 尚未启动时仍然可以访问:

    select body-of get in system/schemes/http/handler 'open quote response-actions:
    

    你可以得到最后的响应行:

    in-http-scheme [response-line]
    

    或者,您将需要一个为 HTTP 上的服务设计的方案。我有一个REST protocol(两个版本,一个是uses cURL,一个是使用customised HTTP scheme,但效果不太好)。虽然适用于 Rebol 2。我有 Rebol 3 版本的计划。

    【讨论】:

    • 感谢您的帮助,克里斯。一小点,Firefox 和 Chrome 都会显示 HTTP 响应的内容,即使它有 404 响应代码。 IE9 显示其标准页面未找到消息。我想这是一个网络已经发展的例子,但并不是每个人都赶上了。通过 TCP 连接似乎是我用例的最佳选择。
    • 确实,我应该规定“15 年前你在浏览器中的方式”。
    【解决方案2】:

    Christopher Ross-Gill 为 Rebol 创建了一个 REST 协议,该协议允许对所有标头进行简单访问,甚至可以处理 OAuth。在这里查看详细信息。

    http://www.ross-gill.com/page/REST_Protocol
    

    不幸的是,它目前仅适用于 Rebol 2,并且取决于 http 请求使用 curl。

    【讨论】:

    • 感谢约翰的回复。我相信 ChrisRG 的 REST 协议调用 curl。我真的在寻找一种只有 REBOL 的解决方案,它可以更好地降低到 REBOL 的 tcp 协议支持。顺便说一句,我真的很想了解内容而不是标题。
    • 我有一个仅 Rebol 的版本(链接在 that article 中)。它不是那么好(curl 解决方案效果更好)。
    猜你喜欢
    • 2021-12-09
    • 2011-04-12
    • 2012-11-07
    • 2012-10-12
    • 2022-06-28
    • 2019-04-15
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多