PowerShell生成JSON和cloudflare API的问题



我正试图写一些PowerShell来更新我的Cloudflare帐户上的'A'记录。代码如下所示:

##Configure headers
$Bearer = "Bearer " + $cloudflareAPIToken
$Headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$Headers.Add("Authorization",$Bearer)
##Configure Payload
$Body = @{
type = 'A'
Name = 'homepc'
Content = '8.8.8.8'
ttl = 1}
$Jsonbody = $Body | ConvertTo-Json -Compress
Invoke-RestMethod -Method PUT "https://api.cloudflare.com/client/v4/zones/$DNSZoneID/dns_records/$ARecordID"  -Headers $Headers -Body -$Jsonbody -ContentType 'application/json'

我得到了错误

Invoke-RestMethod: {"result":null,"success":false,"errors":[{"code":9207,"message":"Content-type must be application/json."}],"messages":[]}

我的json有效负载是这样的

PS C:UsersFrank> $Jsonbody
{"type":"A","Name":"homepc","ttl":1,"Content":"8.8.8.8"}

如果我把这个有效负载剪切粘贴到Postman中,那么它就可以工作了。下面是Postman生成的代码。这是

curl --location --request PUT 'https://api.cloudflare.com/client/v4/zones/6b5e4cf4634bc20cebc1cd96072c/dns_records/4cb90f1dabfcc63a97055234520' 
--header 'Authorization: Bearer zHl3LhnQzRyw1_' 
--header 'Content-Type: application/json' 
--data-raw '{"type":"A","Name":"homepc","Content":"8.8.8.8","ttl":1}'

有谁能帮我弄清这件事的真相吗?提前感谢

弗兰克

我不使用CloudFlare,但从错误消息来看,您似乎缺少Content-Type标头。试着添加这一行:

$Headers.Add('Content-Type', 'application/json')

编辑:头是不需要的,因为它是使用-ContentType参数指定的Invoke-RestMethod。仔细检查命令行,参数-Body -$Jsonbody在JSON主体变量前面有一个错误的-,这使得发送的字符串为-{....}

最新更新