我在bash腳本上運行Curl命令,效果很好,但當我在Perl中使用同樣的命令時,卻出現了以下的錯誤 -
錯誤 -
錯誤 -
lb_update o/p: <! DOCTYPE HTML PUBLIC "-/W3C/TD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>長度要求</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"> </HEAD>
<BODY><h2>長度要求</h2>
<hr><p>HTTP錯誤411。請求必須是分塊的或有內容長度的。</p>
</BODY></HTML>
Command -
curl -H "Content-Type:application/json"/span> -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 "Content-Length:0" 和 --ignore-content-length
我是第一次在這些論壇上發表問題,如果有什么錯誤,請多多包涵
。uj5u.com熱心網友回復:
你應該總是在你的Perl腳本中添加use strict和use warnings。@output在你的`...`里面被Perl插值為一個陣列。由于這個陣列不存在,@output被替換成一個空字串。這意味著,你的命令不是像你所希望的那樣做-d @output.json,而是做-d .json。為了解決這個問題,在@output前加一個反斜杠。-d @output.json.
如果啟用了strict和warnings,就會列印出以下錯誤/警告:
在t.pl行6的字串中@output可能被意外地插值了。
全域符號"@output"需要明確的包名(你是否忘記宣告"my @output"?)在t.pl行6。
此外,與其使用system和curl,不如使用Perl模塊更穩健。特別是,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'/span>。
Authorization => "Bearer $authtoken",
Content => [ file => 'output.json' ] )。)
die $req->status_line unless $req-> is_success;
my $content = $req-> decoded_content;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311376.html
標籤:
