【问题标题】:Using variable for HTTP request headers with Perl使用 Perl 的 HTTP 请求标头变量
【发布时间】: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 循环实际上是从数组中打印字符串,但它似乎不正确。

标签: perl lwp


【解决方案1】:

@headers = "'x-auth-token' => '$_token'";

标头函数需要传递两个参数。标头名称和标头值。

您正在向它传递 一个 参数:一个包含 Perl 代码片段的字符串。

您需要更明智地格式化数据。


my %headers = (
    "x-auth-token" => $_token;
);

foreach my $header_name (keys %headers) {
    $req->push_header($header_name => $headers{$header_name});
}

【讨论】:

  • 为什么不直接$req->header(%headers)
  • @MattJacob — 如果该语法有效,那就太好了,但我在浏览文档时没有注意到。
  • 它不喜欢我现在在哈希中使用的裸词。它抱怨“x”和“auth”。有什么技巧可以骗过它吗?
  • @user3270760 — 糟糕。在它周围加上引号。
  • @user3270760 什么裸词?如果没有看到您的数据,很难为您提供帮助。记住——我们现在不是在看你的肩膀,所以请帮我们一点忙。
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 2015-07-13
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2019-01-08
  • 2012-01-06
  • 2014-09-25
相关资源
最近更新 更多