首页 > 解决方案 > Perl: LWP::UserAgent 关于传递参数的规则

问题描述

例如我有一个命令

curl -H "Content-Type: application/json" -H "Authorization: Bearer ACCESS_TOKEN" -X GET https://api.xxx/v1/datapackages/yyy

(1) 我很困惑何时在传递参数时使用 [ ]。下面哪一项是正确的,为什么?

没有 [ ]

my $r2 = $ua -> get("https://api.xxx/v1/datapackages/yyy",
         'Content-Type' => 'application/json',
         Authorization => 'Bearer '.$token,
);

或与 [ ]

my $r2 = $ua -> get("https://api.xxx/v1/datapackages/yyy",
         [
         'Content-Type' => 'application/json',
         Authorization => 'Bearer '.$token,
         ]
);

(2) 我看到有时参数被引用,有时不被引用。是否应该引用“授权”并写为

和 ' '

'Authorization' => 'Bearer '.$token,

或没有''

Authorization => 'Bearer '.$token,

非常感谢!

标签: perlcurl

解决方案


文档是get()这样说的:

得到

my $res = $ua->get( $url );
my $res = $ua->get( $url , $field_name => $value, ... );

此方法将在给定的 URL 上发送一个 GET 请求。可以提供更多参数来初始化请求的标头。这些以单独的名称/值对的形式给出。返回值是一个响应对象。有关它提供的接口的描述,请参阅HTTP::Response

所以,这只是谈论将参数作为键/值对传递。它没有说明使用数组引用。所以,如果我是你,我会坚持第一种方法。

“胖逗号”(=>)记录在perldoc perlop中(因为它是一个运算符),它说:

运算符(有时发音为“ =>fat comma”)是逗号的同义词,但如果它以字母或下划线开头并且仅由字母、数字和下划线组成,它会使左侧的单词被解释为字符串。这包括可能被解释为运算符、常量、单个数字 v 字符串或函数调用的操作数。如果对此行为有疑问,可以明确引用左操作数。

否则,=>根据上下文,运算符的行为与逗号运算符或列表参数分隔符完全相同。

基本上,如果它左边的东西是一个单词(我的意思是一系列字母数字字符和下划线),那么你可以省略它周围的引号。


推荐阅读