使用Sectigo API添加域名时Invoke-WebRequest报-1002错误求助
解决Sectigo API "Cannot parse message body" 错误
问题原因
你手动拼接JSON字符串时的引号处理错误:
- 原代码用单引号包裹JSON模板,PowerShell中单引号是字面量字符串,里面的
"会被当作和"两个字符直接输出,生成的JSON包含`"这种非法格式,导致API无法解析。 - 固定字符串用双引号包裹,里面的`"会被PowerShell正确解析为",所以JSON格式合法。
另外手动拼接JSON还存在潜在风险:如果输入的域名包含特殊字符(如"、\),会直接破坏JSON结构。
推荐解决方案:使用ConvertTo-Json生成合法JSON
PowerShell自带的ConvertTo-Json能自动处理引号转义和嵌套结构,是最可靠的方式:
$domain = Read-Host "Provide Domain name" # 先构建PowerShell对象 $domainPayload = [PSCustomObject]@{ name = $domain description = "Domain created via REST API" active = $true delegations = @( [PSCustomObject]@{ orgId = 000000 # 这里直接写数字,不要加引号 certTypes = @("SSL") } ) } # 转换为JSON,指定Depth确保嵌套结构被正确序列化 $crt_domain = $domainPayload | ConvertTo-Json -Depth 3 $create_domain = Invoke-WebRequest -Uri "https://cert-manager.com/api/domain/v1" ` -Method Post ` -Headers $headers ` -ContentType "application/json;charset=utf-8" ` -Body $crt_domain
可选方案:修正手动拼接的引号写法
如果坚持手动拼接,需要用双引号包裹整个JSON模板,确保变量和转义引号被正确解析:
$domain = Read-Host "Provide Domain name" $crt_domain = "{`"name`":`"$domain`",`"description`":`"Domain created via REST API`",`"active`:true,`"delegations`":[{`"orgId`":000000,`"certTypes`":[`"SSL`"]}]}" $create_domain = Invoke-WebRequest -Uri "https://cert-manager.com/api/domain/v1" ` -Method Post ` -Headers $headers ` -ContentType "application/json;charset=utf-8" ` -Body $crt_domain
注意:这种方式无法自动处理域名中的特殊字符,仅推荐用于简单场景。
内容的提问来源于stack exchange,提问作者Radek K
相关产品推荐
相关产品推荐

