gpt4 book ai didi

azure - Perl Curl PUT 和错误 411(内容长度)

转载 作者:行者123 更新时间:2023-12-03 01:22:34 24 4
gpt4 key购买 nike

我在 bash 脚本上运行 Curl 命令,它工作正常,但是当我在 Perl 中使用相同的命令时,它失败并出现以下错误 -

错误 -

lb_update o/p: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Length Required</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Length Required</h2>
<hr><p>HTTP Error 411. The request must be chunked or have a content length.</p>
</BODY></HTML>

命令 -

curl -H "Content-Type:application/json" -H "Authorization: Bearer $authtoken" -X PUT "https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Network/loadBalancers/<load-balancer>?api-version=$apiversion" -d @output.json

Perl 命令 -

$lb_update=`curl -H "Content-Type:application/json" -H "Authorization: Bearer $authtoken" -X PUT "https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Network/loadBalancers/<load-balancer>?api-version=$apiversion" -d @output.json';

我尝试使用以下参数修改 Perl 命令,但这没有帮助。-H“内容长度:0”和--忽略内容长度

我刚开始在这些论坛上发布问题,如有任何错误,请多多包涵

最佳答案

您应该始终将 use strictuse warnings 添加到 Perl 脚本中。 `...` 中的 @output 由 Perl 作为数组进行插值。由于该数组不存在,因此 @output 被替换为空字符串。这意味着您的命令不是按照您的意愿执行 -d @output.json ,而是执行 -d .json 。要解决此问题,请在 @output 前添加反斜杠:-d\@output.json

启用严格警告后,将打印以下错误/警告:

Possible unintended interpolation of @output in string at t.pl line 6.
Global symbol "@output" requires explicit package name (did you forget to declare "my @output"?) at t.pl line 6.

此外,使用 Perl 模块会更加健壮,而不是使用 systemcurl。特别是LWP::UserAgent是一个很棒的模块。例如:

my $ua = LWP::UserAgent->new;
my $req = $ua->put("https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Network/loadBalancers/<load-balancer>?api-version=$apiversion",
Content_Type => 'application/json',
Authorization => "Bearer $authtoken",
Content => [ file => 'output.json' ]);
die $req->status_line unless $req->is_success;
my $content = $req->decoded_content;

关于azure - Perl Curl PUT 和错误 411(内容长度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68841991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com