Bash 脚本:在curl JSON Post 数据中使用字符串变量

2024-04-07

我想发送一个 json 请求并在发布数据中嵌入一个变量。 我做了一些研究,然后想出了变量周围的单引号。

    #!/bin/bash
    FILENAME="/media/file.avi"
    curl -i -X POST -H "Content-Type: application/json" —d '{"jsonrpc": "2.0", "method": "Player.Open", "params":{"item":{"file":"'$FILENAME'"}}}' http://192.167.0.13/jsonrpc

不幸的是我收到一些错误:

curl: (6) Couldn't resolve host '—d'
curl: (3) [globbing] nested braces not supported at pos 54
HTTP/1.1 200 OK
Content-Length: 76
Content-Type: application/json
Date: Wed, 29 Jan 2014 19:16:56 GMT

{"error":{"code":-32700,"message":"Parse error."},"id":null,"jsonrpc":"2.0"}

显然大括号和 http 答案存在一些问题,该命令无法执行。我这里的代码有什么问题吗? 谢谢!

这是我的curl版本:

curl 7.30.0 (mips-unknown-linux-gnu) libcurl/7.30.0 OpenSSL/0.9.8y
Protocols: file ftp ftps http https imap imaps pop3 pop3s rtsp smtp smtps tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL 

更新:使用更简单的

request_body=$(cat <<EOF
{
  "jsonrpc": "2.0",
  "method": "Player.Open",
  "params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
)

而不是我下面解释的。但是,如果可以选择,请使用jq改为生成 JSON。这确保了$FILENAME被正确引用。

request_body=$(jq -n --arg fname "$FILENAME" '
{
  jsonrpc: "2.0",
  method: "Player.Open",
  params: {item: {file: $fname}}
}'

首先使用请求正文的内容定义一个变量会更简单:

#!/bin/bash
header="Content-Type: application/json"
FILENAME="/media/file.avi"
request_body=$(< <(cat <<EOF
{
  "jsonrpc": "2.0",
  "method": "Player.Open",
  "params": {
    "item": {
      "file": "$FILENAME"
    }
  }
}
EOF
))
curl -i -X POST -H "$header" -d "$request_body" http://192.167.0.13/jsonrpc

这个定义可能需要解释才能理解,但请注意两大好处:

  1. 您消除了一定程度的引用
  2. 您可以轻松地设置文本格式以提高可读性。

首先,您有一个从文件中读取的简单命令替换:

$( < ... )   # bash improvement over $( cat ... )

不过,您可以指定一个进程替换,而不是文件名,其中使用命令的输出,就好像它是文件的正文一样。

进程替换中的命令很简单cat,它从此处的文档中读取。这是包含您的请求正文的此处文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 脚本:在curl JSON Post 数据中使用字符串变量 的相关文章

  • 如何在 OS X 上查看 $PATH 变量的当前值?

    PATH returns bash usr local share npm bin Library Frameworks Python framework Versions 2 7 bin usr local bin usr local s
  • json文件格式的升级路径

    我们将 Java 应用程序的用户首选项存储在 JSON 文件中 使用Jackson http jackson codehaus org 随着我们继续开发该应用程序 我们将添加首选项 重命名首选项并删除过时的首选项 当用户将应用程序升级到下一
  • PowerShell JSON 添加值格式

    我正在向 json 文件添加数据 我这样做是通过 blockcvalue connectionString server localdb mssqllocaldb Integrated Security true Database data
  • 从哈希中删除 nil 值

    我希望从哈希中删除具有nil value article是一个存储每篇文章的类 并且attributes方法将文章存储为散列 预期结果 articles results author null title Former bar manage
  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • awk 的 printf 插入多个变量的正确语法是什么?

    我复制了一些使用 printf 输出字符串在文件中出现的频率的代码 awk BEGIN print The number of times a appears in the file a a counter 1 END printf s n
  • WebApi 自定义 JsonConverter 未调用

    我为 Guid 实现了一个自定义 JsonConverter 如果我在像这样序列化的类的属性 Guid 类型 上声明它 JsonConverter typeof JsonGuidConverter 然后它被调用并且工作正常 但是 我想 自动
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的
  • MongoDB 中有内置的 JSON.parse 吗?

    是否有任何 Mongo 命令行 函 数可以将字符串转换为对象 例如JSON parse 或类似的东西 db sessions update set extra JSON parse stringData 我的解决方案 function my
  • 连接数据库错误类型:2002:权限被拒绝

    我正在尝试使用以下脚本连接数据库 cxn test php
  • 如何在chart.js中使用JSON数据?

    您好 我一直在尝试使用 MYSQL 数据库中的数据 并使用它们通过 Chart js 创建图形图表 我将数据编码为 JSON 数据 通过 php 文件名 data1 php 现在我需要使用 Jquery 或 javascript 将这些 J
  • Rails:通过 Ajax 传递参数

    我需要通过 javascript 将参数传递回服务器 目前 我将它们传递给 JavaScript 如下所示 sendParams 然后像这样将它们发回 function sendParams q ajax url mymodel myact
  • 不要回显 cURL

    当我使用这段代码时 ch curl init url statuses curl exec ch curl close ch 我得到了我想要的东西 但如果我只是使用它 statuses被回显到页面上 我怎样才能阻止这个 将其放在第 2 行
  • 将 JSON Map 传递到 Spring MVC 控制器

    我正在尝试将 Map 的 JSON 表示形式作为 POST 参数发送到我的控制器中 RequestMapping value search do method RequestMethod GET consumes application j
  • 使用 AFNetworking 2.0 发布 JSON 数据

    我有一个 Web 脚本 它通过 HTTP POST 请求接受 JSON 字符串作为输入 我遇到过几个相同的 AFNetworking 1 x 示例 任何人都可以指出我或提供 AFNetworking 2 0 示例 以对使用格式化 JSON
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w

随机推荐

  • 初学者:Scala 2.10 中的 Scala 类型别名?

    为什么此代码无法编译并出现错误 未找到 值矩阵 从文档和一些 可能已经过时的 代码示例来看 这应该可行吗 object TestMatrix extends App type Row List Int type Matrix List Ro
  • 模板参数推导:哪个编译器在这里?

    考虑以下代码 template
  • 为什么 helm 不使用部署模板中定义的名称?

    即来自name Chart Name Values module5678 name pod below deployment yaml apiVersion apps v1 kind Deployment metadata labels a
  • 在启动时注册多个 DbContext 实例以在通用存储库中使用

    我正在尝试创建一个通用存储库 它接受 2 个通用类型 例如 public class EfRepository
  • 在 Azure 上部署 MEAN+Webpack

    如何部署 MEAN STACK WEBPAC 应用程序 我有一个 MEAN Stack Webpac 应用程序和 nodejs 服务器 提供其余api 我使用 webpack 开发服务器运行 Angular 应用程序 构建 webpack
  • QMessageBox::ritic 不显示标题文本

    我需要显示简单的错误消息 QMessageBox critical nullptr My Title Text 但出现的对话框的标题为空 我做错了什么 PS 操作系统 MacOS 10 9 1 你没有做错什么 从QMessageBox se
  • Silverlight 应用程序中的跨线程访问无效

    我正在使用 Hammock 框架从 Silverlight 应用程序到 Rest 服务进行异步服务调用 在 完成 回调中 我正在更新绑定到视图上组合框的 ObservableCollection OnPropertyChanged 事件处理
  • Spring AMQP RabbitMQ 如何直接发送到Queue而不需要Exchange

    我正在使用 Spring AMQP 和 Rabbitmq 模板 如何直接将消息发送到队列而不使用Exchange 我该怎么做 我该怎么做 你不能 发布者不知道队列 只是交换和路由密钥 但是 所有队列都绑定到默认交换器 以队列名称作为其路由键
  • 将列名称文本包装在 R 中的 ggpairs 中

    我正在使用 ggpairs 在绘制矩阵时 我收到一个矩阵 如下所示 正如您所看到的 某些文本长度很大 因此文本看不完整 无论如何 我可以将文本换行 使其完全可见吗 Code ggpairs df 我希望文本换行 以便可以看到类似这样的内容
  • 如何在 Angular 6 中设置日期格式?

    我有一个功能 可以显示用户输入的实时日期 现在当用户输入输入时 我在前端显示 日期 28 10 2018 10 09 我希望更改日期 如果是过去几天 过去一周 过去一年等 因此 如果昨天输入了输入 我想显示如下内容 1d意思是一天前 一年也
  • 使用heroku上传文件

    据我所理解heroku http heroku com不允许存储单个 Rails 应用程序的上传文件 在他们的文档中 他们提到文件可以上传到亚马逊S3 http aws amazon com s3 实例 我目前没有 S3 帐户 因此假设我只
  • 使用 CLI 通过 docker-compose 部署到 Azure 时,访问代理页面时超时

    I have docker compose file version 3 services app2 image kamilwit dockerdocker app2 container name app2 build context ap
  • 设置标题和 v7 抽屉切换之间的间距

    我现在正在使用 v7 支持库的 ActionBarDrawerToggle 但抽屉图标直接位于标题字体处 因为我禁用了 showHomeEnabled 如何在标题和切换开关之间设置更多可用空间 Thanks 事实上 遗憾的是这并不能真正实现
  • Java中的并发排序

    我目前正在开发一个同时对字符串进行排序的程序 我的程序接收一个文件 将文件的每一行读入一个数组 并将字符串数组拆分为更小的字符串数组 然后 程序为每个较小的数组启动一个线程 并对它们进行快速排序 一旦每个线程完成对其数组的排序 主线程就会从
  • C# 和 WCF 中具有存储库模式的 Web 服务?

    任何人都可以确认将存储库模式与 Web 服务集成的最佳方法吗 实际上我的存储库模式现在在 C 中工作 我有 3 个项目 DataAccess Services 和我的表示层 问题是我的表示层有很多东西 我有一个 ASP NET MVC 站点
  • Nginx 上传进度模块与 Rails 和 Passenger

    我一直在尝试使用 Rails 和 Passenger 在 WebFaction 上运行 Nginx 上传进度模块 使用 Paperclip 上传到 S3 到目前为止 我得出的最好结果是它报告开始和结束 但没有报告中间的情况 对 progre
  • 使用正则表达式提取 URL

    我已经搜索了至少 2 小时 但找不到任何使用正则表达式提取以下 URL 的模式 我采用了很多文章中描述的太多模式 但我找不到有用的东西 例如 URL 类似于以下模式 http google com http www google com h
  • JavaScript 中的对象如何实现 Event 接口

    In this MDN 中的 addEventListener https developer mozilla org en US docs Web API EventTarget addEventListener listener 当指定
  • 防止刷新浏览器后重新提交提交

    下面的代码一切都很好 在名为submit php 的文件中 用户可以通过表单输入提交内容 该表单转到submit2 php 其中一些代码将提交内容插入MySQL 数据库 到目前为止 一切都很好 问题是这样的 一旦用户登陆submit2 ph
  • Bash 脚本:在curl JSON Post 数据中使用字符串变量

    我想发送一个 json 请求并在发布数据中嵌入一个变量 我做了一些研究 然后想出了变量周围的单引号 bin bash FILENAME media file avi curl i X POST H Content Type applicat