首页 > 解决方案 > 使用 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 面板来管理我的网站,但我无权访问某些服务器设置。

标签: httpiisbad-requestsim900

解决方案


请求在进入iis之前会经过http.sys模块,会拦截不符合规则的请求,所以你的响应来自Microsoft-HTTPAPI/2.0,状态码为400。解决这个问题可以是修改注册表,但是注册表中的设置是根据你的应用和请求,没有通用的修改方法。

如何解决 HTTP 400 错误

Windows 的 Http.sys 注册表设置

另一种方法是建议你使用类似Fiddler的工具分别捕获sim900发送的请求和postman发送的请求。抓包后详细对比,找出差异,修改sim900请求和postman请求一样,符合http .sys规则。


推荐阅读