api curl脚本没有给出输出

时间:2018-12-06 13:00:32

标签: shell powershell

下面是Powershell使用的API调用

$tokenrequest = @{ "grant_type" = "password"; "username" = $env:EMUsername; "password" =  $env:EMPassword }
Invoke-RestMethod -Uri $URL1 -ContentType application/x-www-form-urlencoded -Headers @{ Authorization = ("OAuth2")} -Method POST -Body $tokenrequest

转换为curl脚本时相同的是不提供任何输出

curl -X POST $URL1 -H "Content-Type:application/x-www-form-urlencoded" -H "Content-Length:1045" -H "Authorization:OAuth2" --data '{"grant_type":"password", "username":$env:EMUsername,"password":$env:EMPassword}' --write-out token

1 个答案:

答案 0 :(得分:0)

有几个问题:

  • 首先,正如Matt所指出的那样,您正在尝试在字符串中引用环境变量,例如$env:EMUsername,而您正在使用'...',即,单引号字符串,其中在设计上不会发生变量扩展(插值)-请使用"..."引号。

  • 接下来,为了在JSON文本中嵌入诸如$env:EMUsername之类的字符串值,必须将其"..."封闭 _作为JSON文本的一部分:例如,"{ `"username`": `"$env:USERNAME`" }"

  • 最后,不幸的是,您必须手动\"-转义所有嵌入式"实例,以确保可以被外部系统识别程序,例如curl ;结合PowerShell自身对"的转义,这意味着嵌入的"实例必须以\`" 进行转义(原文:或\"";请参见{ {3}}作为背景)。

将它们放在一起:

$json = "{
  \`"grant_type\`": \`"password\`",
  \`"username\`": \`"$env:EMUsername\`",
  \`"password\`": \`"$env:EMPassword\`"
}"

curl -X POST $URL1 -H "Content-Type:application/x-www-form-urlencoded" `
     -H "Content-Length:1045" -H "Authorization:OAuth2" `
     --data $json --write-out token