【问题标题】:cURL : Sending part data from stdin in POSTcURL : 在 POST 中从标准输入发送部分数据
【发布时间】:2017-06-24 11:19:00
【问题描述】:

我要制作 2 个 cURL。来自 1 curl 的数据需要格式化并作为第二个 cURL 中的输入发送。我尝试了以下方法:

curl -XPOST -H "Content-type: application/json" -d '{"a":1, "b" : 2}' 'https://a.com/a' | python -c "导入 json,sys;o=json.load(sys.stdin);o1=dict(id=o['foo'],hash=o['bar']);print(json.dumps(o ));打印(json.dumps(o1));" | curl -XPOST -H "Content-type: application/json" https://a.com/b -d @-

在上述 cURL 组合中,我通过 python 解析从第一个 cURL 接收的数据,然后在标准输入上打印接收到的输出和解析的输出,然后将标准输入的输入作为第二个 cURL 的数据。

问题:有两个 JSON 在标准输入中打印,所有这些都作为数据在第二个 cURL 中传递。如何从 stdin 中选择最后一行,这是应该在第二个 cURL 中传递的实际数据?

【问题讨论】:

  • 那你为什么在你的python代码中print(json.dumps(o))?可以省略吗?
  • 我也想知道第一个 cURL 的输出。
  • 在这种情况下,我认为将第一个 cURL 结果打印到stderr 是个好主意。

标签: python json curl stdin


【解决方案1】:

armnotstrong 建议的一种可能的方法帮助我做对了。虽然从技术上讲,这不是问题的答案,但它是一个很好的解决方法。

我正在错误流中打印我的输出,这些输出不需要发送到第二个 cURL。以下是工作卷曲:

curl -XPOST -H "Content-type: application/json" -d '{"a":1, "b" : 2}' 'https://a.com/a' | \
python -c "import json,sys;o=json.load(sys.stdin);o1=dict(id=o['foo'],hash=o['bar']);sys.stderr.write(json.dumps(o));print(json.dumps(o1));" |\
curl -XPOST -H "Content-type: application/json" https://a.com/b -d @-

【讨论】:

  • @sergio 我很欣赏您的编辑,但我个人对它感到不舒服,因为它妨碍了可读性。通过将其转换为code block,它会变得太长。如果有人试图理解它,那么它的紧凑性会有所帮助。否则,当一些人到达最右边的部分时,(s)他失去了最左边部分的上下文&,这太过分了。
  • @sergio 对您的编辑做了一些修改,使其更具可读性。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 2021-03-05
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多