Tcl http::getUrl中的headers参数
我正在将http::getUrl中的头参数作为Tcl http::getUrl中的headers参数,tcl,Tcl,我正在将http::getUrl中的头参数作为 -headers{Authorization{Bearer$token}内容类型应用程序/json} 但它并没有取代令牌值。 现在我在上面一步创建一个dict,然后直接传递它 -headers$data 这是因为{}中的字符串不求值,所以这里有两种方法 第一种是使用list命令: -headers [list \ Authorization [list Bearer $token] \ Conte
-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
是一个字符串,但是您可以访问它,因为它是一个没有问题的列表。我强烈推荐第一个变量;如果令牌包含列表元字符({
和}
),则第二个可能会有意外行为。对,谢谢,我更好地解释了这一部分,以及这两种方法的区别。我强烈推荐第一个方法;如果令牌包含列表元字符({
和}
),则第二个可能会有意外行为。好的,谢谢,我在这一部分做了更好的解释,以及这两种方法的区别。