我使用C ++中的REST api在Firebase上创建了一个简单的注释存储系统。我最近遇到了一个问题,即包含中文字符会阻止上传评论。这是一个失败的数据包示例:
POST / HTTP/1.1
Host: 127.0.0.1:10000
Accept: */*
User-Agent: CommentClient/1.0
Connection: keep-alive
Keep-Alive: timeout=0, max=0
Content-Type: application/json; charset=utf-8
Content-Length: 198
Pragma: no-cache
{
"CommentObject":
{
"Comment": "是",
"Location": "X=1.000 Y=2.000 Z=3.000",
"Rotation": "P=5.000000 Y=6.000000 R=4.000000",
"Date": "2015.10.12-15.24.48",
"Resolved": false
}
}
当我尝试发送此数据包时,我收到两个不同的错误。
最初,我收到Http Code 400,错误为:error : Invalid data; couldn't parse JSON object, array, or value.Perhaps you're using invalid characters in your key names.
当我在重新启动程序之前发出任何后续请求时,我得到Http Code 405,错误为:error: Unsupported request type
。
我的要求有问题吗?我可以通过仪表板或使用Vulcan将相同的数据放入Firebase。有人可以提出解决方案吗?
答案 0 :(得分:0)
好吧,为了后人的缘故,问题只是我使用的一个插件是将Content-Length标头设置为字符串的长度,如果所有字符都是一个字节就没问题,因为它们会是使用ascii样式的字符串,但是一旦开始添加具有多个字节的字符(例如中文字符),Content-Length将不再与实际的字节数相匹配。答案只是将字符串转换为utf-8字节,并使用该数组的长度作为Content-Length。