开发者社区 问答 正文

钉钉机器人用TCP-POST接入返回400的问题

这是我的POST文本,本想用ESP8266发送POST信息到钉钉机器人,一直调不通。后来用这款TCP调试助手发送也是同样的400错误。但用postman能发送成功。

POST /robot/send?access_token=f8edcaaff5a8ae6d4a9f214934dab6fff69d14762c13e17e5abbe247d7b668f1 HTTP/1.1
Content-Type: application/json;charset=utf-8
Host:https://oapi.dingtalk.com
Connection:close


{\"msgtype\":\"text\",\"text\":{\"content\":\"主灯开关9\"}}

360截图20200810221859932.jpg 返回的一直是400错误。下面是postman发送成功的截图 222.jpg333.jpg

一直找不到那里出问题了,麻烦大神门帮忙解决一下; 附上postman的解析代码 POST /robot/send?access_token=f8edcaaff5a8ae6d4a9f214934dab6fff69d14762c13e17e5abbe247d7b668f1 HTTP/1.1 Host: oapi.dingtalk.com Connection: close Content-Type: application/json cache-control: no-cache Postman-Token: 7e5a3f24-1d37-4894-b0c9-2925af589848 {"msgtype":"text","text":{"content":"主灯开关9"}}

展开
收起
游客vl5w2nhibly4y 2020-08-14 12:17:47 1072 分享 版权
阿里云 AI 助理回答

从你提供的信息来看,你的POST请求在ESP8266和TCP调试助手中遇到400错误,但在Postman中能够成功发送。400错误通常意味着服务器未能理解请求的格式或内容,这可能是因为请求头或者请求体不符合API的要求。对比你给出的两个请求示例,有几个点需要注意和调整:

  1. Host头部格式:在你的ESP8266和TCP调试助手的请求中,Host头部包含了协议(https://),这是不正确的。Host字段应该只包含域名部分,如oapi.dingtalk.com。请修改为:

    Host: oapi.dingtalk.com
    
  2. Content-Type: 你已经正确设置了Content-Type: application/json;charset=utf-8,确保数据是以JSON格式发送。

  3. 空行: 确保在请求头和请求体之间有一个空行。从你的文本看,似乎已经做到了这一点,但确保在实际发送时没有遗漏。

  4. HTTPS: 虽然你在描述中提到使用了HTTPS,但在ESP8266的请求示例中没有直接体现出来。确保你的ESP8266代码或TCP调试助手配置是通过HTTPS发送请求的。一些设备或工具可能需要明确指定使用SSL/TLS连接。

  5. Access Token有效性: 确认你的access_token是有效的,并且没有过期。虽然这不是直接导致400错误的原因,但如果token无效,也会收到错误响应,尽管错误码可能会不同。

  6. JSON编码: 确保你的JSON消息体正确无误,没有多余的空白字符或BOM(字节顺序标记)。有些编辑器会在保存文件时自动添加这些字符,它们可能导致解析错误。

根据上述分析,请检查并修正你的请求,特别是Host头部的格式问题,然后再次尝试发送请求。如果问题依旧,建议查看钉钉机器人的官方文档,确认是否有其他特定的请求要求或限制,比如请求体的具体格式、大小限制等。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答