0

我正在使用 Bash 脚本编写 Pushbullet HTTP API 的 cli。发送推送(注释和链接),以及创建、删除和修改联系人和设备都可以使用 curl 和 Bash 直接进行。但是,发送 SMS 和文件要复杂一些,因为两者都需要向服务器发送更复杂的 JSON 格式请求(在推送文件的情况下是多个 JSON 格式请求)。

我尝试发送以下内容的许多变体(带有和不带有转义字符),但服务器不断回复有关 JSON 格式错误的信息。以下代码基于Pushbullet HTTP API 文档中给出的示例。

 curl -su $auth_id: -X POST https://api.pushbullet.com/v2/ephemerals --header "Content-Type: application/json" 
      --data-binary '{ "\"type"\": "\"push"\", "\"push"\": { \
      "\"type"\": "\"messaging_extension_reply"\", \
      "\"package_name"\": "\"com.pushbullet.android"\", \
      "\"source_user_iden"\": "\"$source_idens"\", \
      "\"target_device_iden"\": "\"$target_idens"\", \
      "\"conversation_iden"\": "\"$sms_device"\", \
      "\"message"\": "\"Hello"\" \
} }'

使用 bash -x,我可以看到这是(据说)正在发送到服务器的内容:

--data-binary '{"type": "push", "push": { 
"type": "messaging_extension_reply", 
"package_name": "com.pushbullet.android", 
"source_user_iden": "<source_idens>", 
"target_device_iden": "<device_idens>", 
"conversation_iden": "<sms_phone_number>", 
"message": "Hello" } }'

在所有情况下,服务器都会返回: {"error":{"type":"invalid_request","message":"Failed to parse JSON body.","cat":"(=^‥^=)"}}

使用 curl 通过 Pushbullet API 发送 SMS 的 JSON 请求的适当格式是什么?我是否忽略了一些明显的东西?我正在尝试仅使用 curl 和 Bash 来完成此操作,我看不出它不可能的原因(可能不是最快或最优雅的方式,但肯定是可能的)。

4

2 回答 2

1

我找到了我的问题的解决方案,所以我想我会分享它。其实很简单:

因为 curl 命令包含带有单引号的 JSON 格式的响应,所以没有发生变量扩展。这是 Bash 的一个限制(或者可能是一个特性)。因此,即使服务器响应并{ }指出请求中没有错误,但请求实际上是在没有正确的参数值的情况下发送的,例如user_iden,source_user_iden等。

解决方案:将 JSON 格式请求中的所有变量扩展用双引号和单引号括起来,如下所示:

"'"$user_idens"'"

于 2015-08-26T01:55:57.677 回答
0

首先,我想为 API 的糟糕程度道歉,尤其是文件上传和发送 SMS。我正在考虑将 multipart 或 base64 文件上传添加到 /v2/pushes。我认为第一个可能会帮助您卷曲,不确定 base64 的。多部分虽然是一个巨大的痛苦,所以如果可能的话,我宁愿让它比当前的设置更好,而不是同样糟糕。欢迎提出建议。

我试过你的命令行,它似乎工作,所以我不确定出了什么问题。这是我做的命令行。也许您的引号转义或换行导致 JSON 错误?

curl -u <access_token> -X POST https://api.pushbullet.com/v2/ephemerals --header "Content-Type: application/json" --data-binary '{"type": "push", "push": {"type": "messaging_extension_reply","package_name": "com.pushbullet.android","source_user_iden": "iden","target_device_iden": "device_idens", "conversation_iden": "sms_phone_number","message": "Hello" } }'
于 2015-07-26T01:15:19.867 回答