我正在模拟一个通过HTML命令控制的嵌入式设备。控制器发出的URL如下
http://192.168.0.10/cgi-bin/aw_cam?cmd=QFT&res=1这些会以特定的方式影响设备。我的目标是做一个设备的模拟器,所以我需要捕获和处理所有这样的请求。我已经成功地将Apache配置为调用我的脚本,并且我可以通过读取QUERY_STRING的值来访问"cmd=QFT&res=1“控制字符串。我在Ubuntu 16.04.5上使用Apache 2.4.18。脚本是用C++编写的。
我遇到的问题是,控制器发出的一些命令的形式如下:
http://192.168.0.10/cgi-bin/aw_ptz?cmd=#P80&res=1
http://192.168.0.10/cgi-bin/aw_ptz?cmd=#T50&res=1 无论出于什么原因,无论是谁设计了命令结构,都决定使用#字符作为命令的一部分。但是由于'#‘分隔了URL的片段部分,它后面的信息永远不会到达我的脚本,它只接收"cmd=“。
参数后传递整个字符串,有没有办法?我的脚本吗?我不能更改客户端或协议,只能更改服务器端。
编辑: apache日志显示了整个URL (请参阅下面的日志文件部分),所以即使#应该是一个片段分隔符,它至少会将其写入日志文件,而不是cgi脚本。
192.168.0.9 - - [27/Jan/2019:00:21:10 +0000] "GET /cgi-bin/aw_ptz?cmd=#P53&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P66&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P99&res=1 HTTP/1.0" 200 151 "-" "-"
192.168.0.9 - - [27/Jan/2019:00:21:11 +0000] "GET /cgi-bin/aw_ptz?cmd=#P76&res=1 HTTP/1.0" 200 151 "-" "-"发布于 2019-01-29 03:44:32
这似乎起作用了:
RewriteCond %{THE_REQUEST} \s(.*)#(.*)\s
RewriteRule ^ http://localhost:8000%1#%2 [P,NE]
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/(我让python simple http服务器监听localhost:8000以验证散列是否被正确传递。
https://stackoverflow.com/questions/54384362
复制相似问题