使用 bash 脚本将未序列化和未转义的 HTML 文件数据发送到 API

Send unserialized & unescaped HTML file data to an API with a bash script

我想创建一个 bash 脚本,它接收一个 HTML 文件并将其发送到多个 API 中。

我有一个 test.html 文件,其中包含未序列化的 HTML 数据,如下所示:

<h2 id="overview">Overview</h2>
<p>Have the source of truth in your own space at <strong>somewhere</strong></p>
<pre>
<code class="lang-javascript">function go() {
  console.log(&#39;code blocks can be a pain&#39;);
}
go();
</code>
</pre>

我需要以某种方式将文件的内容发送到 API,如下所示:

curl --location --request POST 'https://devo.to/api/articles' \
--header 'api-key: askldjfalefjw02ijef02eifj20' \
--header 'Content-Type: application/json' \
--data-raw '{
  "article": {
    "title": "Blog Article",
    "body_markdown": "@test.html",
  }
}'

到目前为止我能想到的唯一方法是 serialize/escape HTML 文件,将其作为字符串读入变量(如 $TEST_HTML=$(cat serialized_test.html),然后将其传递至 "body_markdown".

是否可以在 bash 脚本中一步 serialize/escape HTML 或者是否有更好的方法?

我将使用 jq 来构建 JSON 参数,并让它在包含的 HTML 文件中正确处理转义引号、换行符等:

curl --location --request POST 'https://devo.to/api/articles' \
--header 'api-key: askldjfalefjw02ijef02eifj20' \
--header 'Content-Type: application/json' \
--data-raw "$(jq -n --arg html "$(< test.html)" '{article:{title:"Blog Article",body_markdown:$html}}')"

jq 调用将 test.html 的内容放入字符串变量 $html 中,计算结果为:

    {
      "article": {
        "title": "Blog Article",
        "body_markdown": "<h2 id=\"overview\">Overview</h2>\n<p>Have the source of truth in your own space at <strong>somewhere</strong></p>\n<pre>\n<code class=\"lang-javascript\">function go() {\n  console.log(&#39;code blocks can be a pain&#39;);\n}\ngo();\n</code>\n</pre>"
      }
    }

$(< filename) 是一个 bash 替换,计算给定文件的内容。它比 bash 中的 $(cat filename) 更受欢迎,因为它不涉及 运行 另一个过程。