【发布时间】:2015-12-15 13:46:09
【问题描述】:
我正在尝试编写一个函数来在 Perl 中创建 HTTP 请求(主要是 POST 和 GET)。我通过使用变量来保持一切通用,这样我就不必担心请求的类型、有效负载、标头等,但是 HTTP::Request->header() 似乎不喜欢我的变量:
my($req_type, $headers, $endpoint, $args, $request, $jsonfile) = @_;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new($req_type => $endpoint);
$req->content_type('application/json');
foreach (@$headers) {
$req->push_header($_);
}
$req->content($args);
$req->content($request);
print "request : ".$req->as_string;
我尝试了几种不同的方法,使用 push_header 最接近,但我意识到这可能不是最好的解决方案。我认为这可能与传入单引号有关:
@headers = "'x-auth-token' => '$_token'";
如果有帮助,我可以发布更多代码。我希望一些 Perl 大师会确切地知道我做错了什么。我确定这与我传入的字符串的格式有关。
【问题讨论】:
-
为什么将标头作为字符串而不是散列或数组传递?
-
主要是缺乏经验...我以为我是在用数组传递它们?
-
"'x-auth-token' => '$_token'"是一个字符串。数组将是('x-auth-token' => $_token)。数组引用将是['x-auth-token' => $_token] -
你有
$headers,它是一个标量,还是@headers,它是一个数组?如果没有看到您的意见,就不可能给您这个问题的答案。 -
好的,我将输入添加到代码中。它以
$headers的形式出现,foreach 循环实际上是从数组中打印字符串,但它似乎不正确。