在 Windows 中使用 curl 的 Telegram API 会引发“消息文本为空”的错误

问题描述

我正在运行以下命令,但出现以下错误提示文本为空。但它不是。我也试过 POST,它仍然会出现同样的错误。有什么想法吗?

curl.exe -k https://api.telegram.org/bot0000:xxxxx/sendMessage?chat_id=333333&text=yooo

{"ok":false,"error_code":400,"description":"错误请求:消息文本 为空"}'text' 未被识别为内部或外部命令, 可运行的程序或批处理文件

解决方法

你是如何让 Curl 在 Windows 中工作的?我的猜测是 Pearl Bash 黑客。好的,这是我过去发现的。当您在 Windows Powershell 中使用 Curl 时,它并不真正知道如何处理内容。 例子: 当您进行 API 调用时,例如“获取所有机器 ID”,您可能会得到一个包含 100 个值的列表。通常,您会为所需的名称执行类似“Grep”的操作,然后将“id”值传递给变量并使用它来影响目标。 我发现发生的是“文本”字符串没有作为字符串对象传递,而是作为某种机器类型对象传递。简而言之,您最终必须转换数据,然后您必须弄清楚如何搜索它。它变得非常快。

解决办法: 调用 WebRequest

虽然这个模块需要一点时间来习惯,但当你使用它时,你可以将值作为 Powershell Rich Objects 传递,并使用每个人都喜欢的 $variable.value 类型的 Powershell 语法。

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.1

#chat_id variable creation. This might need to be in the header,I don't know this API but wanted to show the example 
$body = @{ 
            chat_id = 333333
            text = yooo 
         } 
#Example. Actual code may vary. 
$message = @{Invoke-RestMethod "https://api.telegram.org/ `
    - Headers @{Authorization = "bot0000 xxxxx"} `
    - Body $body `
    - Method  Get }
#now we can use $message to see what's available.
#we can then use $message.whatever to view the responses.