如何在curl中传递变量?

时间:2017-02-18 10:27:16

标签: curl

目标是在example.com上创建一个帐户。我们需要一个字母数字名称

我们拥有什么:

$name="egon111"
$pw="notegon"

curl -s -X POST -d 'username="'"$name"'"&password="'"$pw"'"' https://example.com/create

我们通常需要以下curl命令:

curl -s -X POST -d "username=egon111&password=notegon" https://example.com/create

语法有什么问题?在我看来,我们目前正在发送名称$name和密码$pw,而不是变量本身,这是完全错误的。 我们收到以下错误:

Select a username that is alphanumeric.

格尔茨, 克拉拉

我是stackoverflow的新手。随意发表评论,以便我可以提高自己。

1 个答案:

答案 0 :(得分:1)

你的作业不正确,正如@sideshowbarker所说。在shell中,与Ruby中的Perl或PHP或全局变量不同,在分配变量时不要对变量使用$,而只在引用变量时使用name="egon111" pw="notegon"

curl

但是仍然存在POST命令中的文字引号问题。不应引用查询字符串参数(以及请求正文中的curl ed等效项)。 (上面赋值中的引号是shell语法,不会存储在变量中;在这种情况下你可以完全取消它们,因为你指定的值不包含任何空格,但它们是无害的。 )

但查询字符串/ POST正文参数不是shell参数。你的curl -s -X POST -d 'username="'"$name"'"&password="'"$pw"'"' https://example.com/create 命令:

'curl' '-s' '-X' 'POST' '-d' 'username="egon111"&password="notegon"' \ 
  'https://example.com/create'

被shell扩展为相当于:

"

请注意usernamepassword值周围的文字curl -s -X POST -d 'username='"$name"'&password='"$pw" https://example.com/create 。这些由Web服务器解释为这些参数值的一部分,而不是引用语法。由于引号不是字母数字,因此您会收到您发布的错误消息。

你可以删除多余的引号,它应该可以正常工作:

username=

但这比它需要的更吵。您不需要将&password=&放在单引号中,因为那里没有任何内容可以展开。您需要引用curl -s -X POST -d "username=$name&password=$pw" https://example.com/create ,但双引号可以正常工作。所以你可以这样做:

if (num_of_players == 1) {
    players[0] = player1;
}
if (num_of_players == 2) {
    players[0] = player1;
    players[1] = player2;
}
if (num_of_players == 3) {
    players[0] = player1;
    players[1] = player2;
    players[2] = player3;
}
if (num_of_players == 4) {
    players[0] = player1;
    players[1] = player2;
    players[2] = player3;
    players[3] = player4;
}
if (num_of_players == 5) {
    players[0] = player1;
    players[1] = player2;
    players[2] = player3;
    players[3] = player4;
    players[4] = player5;
}
if (num_of_players == 6) {
    players[0] = player1;
    players[1] = player2;
    players[2] = player3;
    players[3] = player4;
    players[4] = player5;
    players[5] = player6;
}

for (String y : players) {
    JOptionPane.showMessageDialog(null, "The first dice rolls " + y);