Tcl http::getUrl中的headers参数

Tcl http::getUrl中的headers参数,tcl,Tcl,我正在将http::getUrl中的头参数作为 -headers{Authorization{Bearer$token}内容类型应用程序/json} 但它并没有取代令牌值。 现在我在上面一步创建一个dict,然后直接传递它 -headers$data 这是因为{}中的字符串不求值,所以这里有两种方法 第一种是使用list命令: -headers [list \ Authorization [list Bearer $token] \ Conte

我正在将http::getUrl中的头参数作为

-headers{Authorization{Bearer$token}内容类型应用程序/json}

但它并没有取代令牌值。 现在我在上面一步创建一个dict,然后直接传递它
-headers$data


这是因为
{}
中的字符串不求值,所以这里有两种方法

第一种是使用list命令:

-headers [list \
             Authorization [list Bearer $token] \
             Content-Type application/json ]
-headers [subst -nocommands \
           {Authorization {Bearer $token} Content-Type application/json}]
第二个是subst命令:

-headers [list \
             Authorization [list Bearer $token] \
             Content-Type application/json ]
-headers [subst -nocommands \
           {Authorization {Bearer $token} Content-Type application/json}]
第一种方法适合使用,因为它与OP示例等效,只是列表的不同表达式

第二种方法的目的是,如果您将参数输入作为变量,并且无法更改代码中的格式

请注意,
subst
的大小写与前面的方法一样处理字符串而不是列表

它的工作原理应与字符串可以转换为列表的工作原理相同:

$ tclsh
% set x "A B C D"
A B C D
% lindex $x 0
A
% 

正如您所看到的,变量
x
是一个字符串,但是您可以访问它,因为它是一个列表,没有任何问题。

这是因为
{}
中的字符串没有被计算,所以这里有两种方法

第一种是使用list命令:

-headers [list \
             Authorization [list Bearer $token] \
             Content-Type application/json ]
-headers [subst -nocommands \
           {Authorization {Bearer $token} Content-Type application/json}]
第二个是subst命令:

-headers [list \
             Authorization [list Bearer $token] \
             Content-Type application/json ]
-headers [subst -nocommands \
           {Authorization {Bearer $token} Content-Type application/json}]
第一种方法适合使用,因为它与OP示例等效,只是列表的不同表达式

第二种方法的目的是,如果您将参数输入作为变量,并且无法更改代码中的格式

请注意,
subst
的大小写与前面的方法一样处理字符串而不是列表

它的工作原理应与字符串可以转换为列表的工作原理相同:

$ tclsh
% set x "A B C D"
A B C D
% lindex $x 0
A
% 

正如您所看到的,变量
x
是一个字符串,但是您可以访问它,因为它是一个没有问题的列表。

我强烈推荐第一个变量;如果令牌包含列表元字符(
{
}
),则第二个可能会有意外行为。对,谢谢,我更好地解释了这一部分,以及这两种方法的区别。我强烈推荐第一个方法;如果令牌包含列表元字符(
{
}
),则第二个可能会有意外行为。好的,谢谢,我在这一部分做了更好的解释,以及这两种方法的区别。