我正在尝试使用 Sinatra 和 MessagePack 构建一个 API,但我要自己开枪了 :)
所以我使用 curl 来做一个 POST:
curl -X POST -H "Content-Type: application/x-msgpack" --data-binary '\x82\xA4uuid\xBD8asd76a-a8s7a6d87-asd76as8d76\xABcampaign_id\xA12' http://localhost:9393/
现在在 Sinatra 我只是这样做:
MessagePack.unpack request.body.read
这会导致以下错误:
MessagePack::MalformedFormatError Exception: extra bytes follow after a deserialized object
因为 request.body.read 正在返回:
"\\x82\\xA4uuid\\xBD8asd76a-a8s7a6d87-asd76as8d76\\xABcampaign_id\\xA12"
instead of
"\x82\xA4uuid\xBD8asd76a-a8s7a6d87-asd76as8d76\xABcampaign_id\xA12"
我尝试了所有我能想到的东西,比如 force_encoding(Encode::BINARY) 和其他愚蠢的东西。而且我不确定是谁导致了 ruby、rack 或 sinatra 问题?