我正在尝试使用API和PowerShell网络请求写入私人Google表格文档。我知道我已正确处理了身份验证,因为我可以使用以下代码从表单中读取:
$read = Invoke-WebRequest -Uri "https://sheets.googleapis.com/v4/spreadsheets/$sheet/values/Sheet1!A1:B2?access_token=$($token.access_token)"
当我尝试写入同一张纸时(在清除单元格中的所有内容之后)出现问题:
$json = @”
{
"range": "Sheet1!A1:D2",
"majorDimension": "ROWS",
"values": [
["Door", "15", "2", "3/15/2016"],
["Engine", "100", "1", "3/20/2016"]
]
}
“@
Invoke-WebRequest -Uri "https://sheets.googleapis.com/v4/spreadsheets/$sheet/values/Sheet1!A1:D2:append?valueInputOption=USER_ENTERED&access_token=$($token.access_token)" -Method Post -Body $json
我明白了:
Invoke-WebRequest : The remote server returned an error: (400) Bad Request.
我做错了什么?
答案 0 :(得分:1)
您的Invoke-WebRequest
缺少ContentType
参数,当Method
设置为动词以发送数据(例如Post
)时,这是必需的。
Content-Type字段的目的是充分描述正文中包含的数据,以便接收用户代理可以选择适当的代理或机制来向用户呈现数据,或以其他方式处理数据。适当的方式。
在您的情况下,参数将为-ContentType "application/json"
。例如:
Invoke-WebRequest -Uri "https://sheets.googleapis.com/v4/spreadsheets/$sheet/values/Sheet1!A1:D2:append?valueInputOption=USER_ENTERED&access_token=$($token.access_token)" -Method Post -ContentType "application/json" -Body $json