gpt4 book ai didi

curl - 从 Sinatra 中的管道 cURL 读取 PUT 数据

转载 作者:行者123 更新时间:2023-12-01 09:03:42 26 4
gpt4 key购买 nike

我正在 Sinatra 中重写一个小型服务器后端,目前客户端通过 cURL 调用(例如 echo "foo"| curl -X PUT -T - http://localhost:8090/。问题是,在我在 Sinatra 中的 put 方法中,request.body.read 始终为空,即使在我对其调用 rewind 之后也是如此。此外,params 哈希是完全空的。

奇怪的是,如果我这样做 curl -X PUT -d 'foo' http://localhost:8090/ 反而会起作用。此外,在 node.js 中,我可以使用 request.on('data')request.on('end') 函数很好地阅读它。

有什么方法可以读取 Sinatra 中的 PUT 正文?如果可能的话,我想避免更改客户端代码。

最佳答案

我认为来自客户端的 curl 命令滥用了 -T 标志。 -T 用于上传文件,而不是发送数据。通常,当您不提供目标文件名时,-T 将使用本地文件名进行上传。例如 curl -X PUT -T "bar.txt"http://localhost:8090/ 会将本地文件 bar.txt 上传到远程位置 http://localhost:8090/bar.txt。由于您的客户端代码管道标准输入而不是指定文件,因此不存在本地文件名。而且由于您的客户端代码没有指定任何目标文件名,它将产生未定义的结果。我认为 node.js 接受文件上传的内容作为请求正文中的数据是非标准行为。

您使用 -d 标志的第二个示例是发送数据的正确方法。我真的认为最好的解决方案是更改客户端代码,但如果您愿意,您仍然可以通过管道传输标准输入。只需使用 -d 而不是 -T,如下所示:

echo "foo" | curl -X PUT -d @- http://localhost:8090/

关于curl - 从 Sinatra 中的管道 cURL 读取 PUT 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com