【问题标题】:How can one use CURL to send a shell script as the POST body to Tornado?如何使用 CURL 将 shell 脚本作为 POST 正文发送到 Tornado?
【发布时间】:2018-07-30 14:35:53
【问题描述】:

我不清楚 Tornado 期望如何解析所有内容类型的正文参数。这对 JSON 有意义,也许是表单数据,但对于其他正文内容类型,我不清楚如何使用 CURL 格式化请求以使其工作。

问题:如何使用 CURL 将 shell 脚本作为 POST 正文发送到 Tornado?正文参数的格式是什么?

我尝试过的:

curl -X POST -H "Content-Type: application/x-sh" http://localhost:8888/ -d script='#!/bin/bash \necho "scale=500\; 4*a(1)" | bc -l'

我希望或期望这样做是让 Tornado 处理 HTTP 正文,以便 (1) 正文参数是 script,并且 (2) 对应的值是用于计算 pi 的 shell 脚本:

#!/bin/bash
echo "scale=500\; 4*a(1)" | bc -l

相反,我只收到一个400: Bad Request 错误,而我的调试日志显示self.request.body_arguments 的值是一个空字典{}

【问题讨论】:

    标签: shell post tornado


    【解决方案1】:

    您正在发送带有此标头的 POST 数据 - Content-Type: application/x-sh。但是 Tornado 只支持application/x-www-form-urlencoded 来解析提交的表单/POST 数据。

    只需使用Content-Type: application/x-www-form-urlencoded 提交数据,Tornado 就会在body_arguments 中提供提交的数据。

    【讨论】:

    • 或者,保留内容类型,从-d 参数中删除script=,并查看self.request.body 而不是self.request.body_arguments。除非您需要与 HTML 表单兼容,否则您可以在此处选择要使用的协议。
    • 我对此投了赞成票,但我还没有足够的声望来统计投票。感谢您的帮助!
    猜你喜欢
    • 2014-01-30
    • 2017-09-15
    • 1970-01-01
    • 2016-01-31
    • 2015-11-13
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多