我在IFTTT中创建了一个Web钩子,让我的服务器根据事件向我的Android手机发送通知。由于某种原因,这些值不会在web请求中传递。在Webhooks文档中可以看到:
To trigger an Event with 3 JSON values
Make a POST or GET web request to:
https://maker.ifttt.com/trigger/{event}/with/key/{MyKey}
With an optional JSON body of:
{ "value1" : "", "value2" : "", "value3" : "" }
The data is completely optional, and you can also pass value1, value2, and value3 as query parameters or form variables. This content will be passed on to the action in your Applet.
事件设置为显示Your test value is {{value1}}
。
然后,我尝试在Powershell中运行这个程序:
$WebhookURL = "https://maker.ifttt.com/trigger/{MyEvent}/json/with/key/{MyKey}
Invoke-RestMethod -Method Get -Uri $($WebhookURL+"?value1=TESTVALUE") -ContentType "application/json"
然而,这会向我的手机发送一个通知,上面写着,字面上说,Your test value is {{value1}}
因此,通知是正确触发的,只是"value1“的值没有正确传递。我还尝试将值传递为-Body
,但结果是相同的:
$Body = @{
value1 = "TESTVALUE"
}
Invoke-RestMethod -Method Get -Uri $WebhookURL -Body $Body -ContentType "application/json"
将$Body
值传递给ConvertTo-Json -Compress
会使请求在HTTP Error 403: Bad Request
中失败,因此也不是这样。本质上,我正在做exactly like this other Stack post suggests,但它没有传递值。这里有什么问题吗?
更新:--我还按照Mathias的建议尝试了以下操作:
$Body = @{
value1 = "TESTVALUE"
} | ConvertTo-Json -Compress
Invoke-RestMethod -Method Post -Uri $WebhookURL -Body $Body -ContentType "application/json"
但结果是一样的。我还尝试将带有空字符串的value2和value3添加到主体中,但结果是一样的。我尝试使用和不使用-Compress
,但是结果是相同的,使用和不使用value1周围的引号不会改变任何事情:
UPDATE2:使用Curl的直接抛出一个错误:
curl -X POST https://maker.ifttt.com/trigger/MyEvent/json/with/key/MyKey -H "Content-Type: application/json" -d '{"value1": TESTVALUE}'
{"errors":[{"message":"Unexpected token v in JSON at position 1"}]}
我还尝试使用Invoke-RestMethod
运行Powershell -UseDefaultCredentials
,但结果是一样的。
UPDATE3: IFTTT日志显示Value1的值没有传递,所以请求一定有问题:
发布于 2022-11-21 17:00:14
解决办法:不要使用Invoke-RestMethod
,而是使用Curl:
$WebhookURL = "https://maker.ifttt.com/trigger/MyEventName/with/key/MyKey"
$Command = 'curl -X POST -H "Content-Type: application/json" -d "{""value1"":""' + $VariableWithMyValueHere + '"",""value2"":""Test2"",""value3"":""Test3""}" ' + $WebhookURL
cmd.exe /C $Command
我不知道为什么这个确切的Json适用于Curl,但不适用于Invoke-RestMethod
,但由于它有效,我不打算进一步挖掘。
https://stackoverflow.com/questions/73892622
复制