http - 使用 sim900 发送 get 或 post 请求时 Http 错误代码 400
问题描述
我有一个 SIM900 GSM 模块,用于向服务器发送 GET 和 POST 请求。
最近我为此租了一个主机。我使用 asp.net webforms 编写了一个简单的页面来解析来自 GSM 模块的传入数据,一切正常,直到几天前我注意到我不再可以从我的 gsm 模块接收数据。
在进一步调查后,我发现我租用的主机不断向我的 GSM 模块返回 HTTP 400 错误。这些响应不是来自 IIS,而是来自 Microsoft-HTTPAPI/2.0。请求头是这样的:
GET /test/data?meow HTTP/1.1
Host : www.whatever.com
Connection : keep-alive
这是服务器响应(正文省略):
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Sun, 11 Oct 2020 12:08:28 GMT
Connection: close
Content-Length: 339
我使用 Postman(应用程序)来模拟相同的请求,一切正常。
我还制作了 chrome 请求标头的精确副本并将其提供给模块,但这也不起作用。
注意:我没有使用 sim900 的 HTTP 命令,而是连接到某个端口(在本例中为 80)并手动发出获取请求。
注意 2:我获得了一个 Plesk 面板来管理我的网站,但我无权访问某些服务器设置。
解决方案
请求在进入iis之前会经过http.sys模块,会拦截不符合规则的请求,所以你的响应来自Microsoft-HTTPAPI/2.0,状态码为400。解决这个问题可以是修改注册表,但是注册表中的设置是根据你的应用和请求,没有通用的修改方法。
另一种方法是建议你使用类似Fiddler的工具分别捕获sim900发送的请求和postman发送的请求。抓包后详细对比,找出差异,修改sim900请求和postman请求一样,符合http .sys规则。
推荐阅读
- javascript - 使用 192 位密钥解密 AES,模式 ECB
- vue.js - 如何在 nuxt 和 vuejs 中发送电子邮件?
- office365 - 将我的 SharePoint(本地)门户作为应用程序添加到 MS Teams
- javascript - 添加另一个类名来反应按钮组件
- django - 点击锚链接不会跳到网页的部分
- c++ - 为什么我不能擦除此向量中的一系列元素?
- javascript - Node.JS 使用 web-hooks 和 web sockets 进行缩放
- linux - 使用 Bash 脚本添加到 Crontab(如果不存在)
- sql-server - TSQL:根据孩子的条件选择父母
- r - R 中的数据类型转换似乎没有按预期工作