首页 > 解决方案 > 如何向 HTCPCP 服务器发送 BREW 请求,要求提供一杯加奶油和一杯香草的咖啡

问题描述

我正在尝试向实现超文本咖啡壶控制协议(HTCPCP/1.0,在 RFC 2324 中定义)的服务器发送 BREW 请求,该协议是使用 cURL 构建在 HTTP 之上的协议。

我想用奶油和香草糖浆冲泡咖啡,但到目前为止,我的所有请求都被服务器拒绝了。

令人困惑的是,RFC 说 Content-Type 必须设置为“application/coffee-pot-command”(第 2.11 节),但也说 Content-Type 必须设置为“message/coffeepot”(第 4 节,另外还说"message/coffeepot" 的内容必须包含一个咖啡信息正文,定义为咖啡信息正文 = "start" | "stop")。我已经使用了“application/coffee-pot-command”,纯粹是把它放在第一位(但我都试过了)。

接下来,我添加了一个“Accept-Additions”标题,将牛奶类型指定为“Cream”,将糖浆类型指定为“Vanilla”。RFC 概述了此标头的 BNF:

   Accept-Additions = "Accept-Additions" ":"
                      #( addition-range [ accept-params ] )

    addition-type   = ( "*"
                      | milk-type
                      | syrup-type
                      ) *( ";" parameter )
    milk-type       = ( "Cream" | "Half-and-half" | "Whole-milk"
                      | "Part-Skim" | "Skim" | "Non-Dairy" )
    syrup-type      = ( "Vanilla" | "Almond" | "Raspberry"
                      | "Chocolate" )

我对这部分的最佳猜测是我需要添加以下标题:

--header "Accept-Additions: Skim;1,Vanilla;1"

虽然我没有解释 BNF 的经验,所以这可能是完全错误的。

所有这些都导致我使用 cURL 构建以下请求:

curl -X POST https://theserver.com --header "Content-Type:application/coffee-pot-command" --header "Accept-Additions:Skim;1,Vanilla;1"

但是服务器一直告诉我“无效的饮料,不能冲泡”。我哪里错了?

有一个名为“咖啡”URI 方案的部分包含更多 BNF:

coffee-url  =  coffee-scheme ":" [ "//" host ]
                ["/" pot-designator ] ["?" additions-list ]

coffee-scheme = ( "koffie"                      ; Afrikaans, Dutch
               | "coffee"                   ; English
               )

但我不知道如何解释这一点。我需要在某处添加“coffee:/pot-0”吗?如果是这样,如何在 cURL 中做到这一点?这是我想念的吗?我知道 RFC 是愚人节,但服务器是真实的。给能帮忙的人一杯免费咖啡。

标签: curlbnf

解决方案


推荐阅读