4

有没有比通过 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"}
4

2 回答 2

3

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 协议(两个版本,一个使用 cURL,一个使用自定义的 HTTP 方案,但效果不佳)。虽然适用于 Rebol 2。我有 Rebol 3 版本的计划。

于 2013-07-24T16:11:37.350 回答
0

Christopher Ross-Gill 为 Rebol 创建了一个 REST 协议,它允许简单地访问所有标头,甚至可以处理 OAuth。看看这里的细节。

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

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

于 2013-07-24T10:11:32.527 回答