格式化 curl 命令

Formatting curl command

在WindowsGitBash中,这个curl命令有效:

curl -v 'https://developer.api.autodesk.com/authentication/v1/authenticate' \
  -X 'POST' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=6BfkncD9ypGMiHkjrfka5ydqrG4GLx1z&client_secret=EC5i7QG61Qg8jDmZ&grant_type=client_credentials&scope=data:read'

但是当我尝试格式化-d 中的内容时,它不起作用:

curl -v 'https://developer.api.autodesk.com/authentication/v1/authenticate' \
  -X 'POST' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=6BfkncD9ypGMiHkjrfka5ydqrG4GLx1z&
    client_secret=EC5i7QG61Qg8jDmZ&
    grant_type=client_credentials&
    scope=data:read
  '

我可以格式化它并且它有效吗?

-d/--data/--data-ascii option of curl sends a data which is expected to be in one line in case of URL paraleters (as opposed to JSON, as seen for instance here,其中数据可以在多行)。

这意味着您需要先在变量中构建字符串,然后在 curl 中使用该变量。

vonc@vclp MINGW64 /c/test
$ data=$(printf '%s' '
    client_id=6BfkncD9ypGMiHkjrfka5ydqrG4GLx1z&
    client_secret=EC5i7QG61Qg8jDmZ&
    grant_type=client_credentials&
    scope=data:read
' | sed ':a; N; $!ba; s/\n\s*//g')

curl -v 'https://developer.api.autodesk.com/authentication/v1/authenticate' \
  -X 'POST' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d "${data}"

所以在这种情况下有两个步骤。