1

我尝试在 PHP 站点中使用 curl 在 Azure Stack 中创建存储帐户,但不幸的是,我总是收到错误消息“HTTP 错误 411。请求必须分块或具有内容长度。”。

我输入了“”Content-Length:0,“”或正确的数字,但仍然是同样的错误。

这是我的代码(由 Postman 生成):

    $curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://management.myazurestack.com/subscriptions/XXXXXX/resourcegroups/YYYYYYYY/providers/Microsoft.Storage/storageAccounts/sa01?api-version=2017-10-01",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_SSL_VERIFYPEER => 0, 
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => "{\r\n                \"sku\": {\r\n                  \"name\": \"Standard_LRS\"\r\n                },\r\n                \"location\": \"myregion\"\r\n              }",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Accept-Encoding: gzip, deflate",
    "Authorization: ". $fBearer,
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Content-Length: 0",
    "Content-Type: application/json",
    "Host: management.myazurestack.com",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

任何想法 ?

谢谢

4

1 回答 1

0

您必须使用其中一个Content-Length或分块,但不能同时使用两者。

这是你如何使用Content-Length

Content-Length: 1024

这就是你使用的方式Transfer-Encoding

Transfer-Encoding: chunked

有一个用于 PHP 的 Azure SDK,它使事情更容易管理。

于 2019-12-17T06:10:18.113 回答