首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl Curl PUT和错误411 (内容长度)

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

Stack Overflow用户
提问于 2021-08-19 04:19:38
回答 1查看 249关注 0票数 1

我正在bash脚本上运行Curl命令,它运行得很好,但是在Perl中使用的相同的命令失败了,下面的错误如下-

错误-

代码语言:javascript
复制
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>

命令-

代码语言:javascript
复制
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命令-

代码语言:javascript
复制
$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”和-忽略内容长度

我刚开始在这些论坛上发表问题,请原谅我的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-19 08:51:19

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

启用strictwarnings后,将打印下列错误/警告:

代码语言:javascript
复制
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.

此外,与使用systemcurl不同,使用Perl模块将更加健壮。特别是,LWP::UserAgent是这样的一个很好的模块。例如:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68841991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档