我目前遇到因未在卷曲请求中附加标题Content-Type
而导致的错误。
提出正确的请求
curl -v -XPOST -H'Content-Type: image/png' -d@image.png "localhost:9000"
RequestHandler.request.arguments.items()
是一个干净的清单[]
但是,如果我删除-H'Content-Type: image/png'
标题,只需执行以下操作:
curl -v -XPOST -d@image.png "localhost:9000"
arguments.items()
将完全混乱 - 它现在包含一个看起来像这样的随机unicode列表:
[('', ['\x19\xf4cX0\xd4A\x86\xd2\x90\x0e\xcf\xa9p\xe5\x82:\x8c\xa8VJz\xc4\xd8Pa\xbfr\xb9`\xc7\xa4\xa8\x90<\xb5\xe3\xd4\x15\xb8\xb9\xfec.*\xff\xd7\xe0rb\xae\x16\x9a\xf5\x08\x9e\xc5\x7f\xd0\x8b\xdf\x9d\x0fQ2, ......
我认为这是我所附图像的内容。
如何解决此问题?是否有某些标志/功能/等我可以在龙卷风中使用,以防止数据丢失?或者我是否必须让用户包含'Content-Type'
标题?
编辑:
很抱歉我之前没有说清楚,我想提取RequestHandler.request.arguments.items()
中的内容,其中可能包含我需要的一些值。
答案 0 :(得分:0)
您似乎正在尝试将图片上传到网站。 Content-type
没有必要。您需要发送HTTP Multipart Data。
根据此answer,您需要使用-F
发送多部分数据:
curl -F "image=@/home/user1/Desktop/test.jpg" "localhost:9000"
对于tornado
部分,您可以使用self.request.files
来访问上传的文件。这是example。
答案 1 :(得分:0)
request.arguments
用于HTML表单参数。使用-d@image.png
时,数据不是作为表单参数发送,而是作为原始主体发送,因此您需要从request.body
读取数据。这通常使用方法PUT
代替POST
。
或者,您可以在@ skyline75489的答案中更改使用多部分表单包装器的请求,并从request.files
读取图像。