Я работаю над эмуляцией встроенного устройства, которым управляют с помощью команд HTML.Контроллер выдает URL-адреса, такие как
http://192.168.0.10/cgi-bin/aw_cam?cmd=QFT&res=1
, и это определенным образом влияет на устройство.Моя цель - сделать эмулятор устройства, поэтому мне нужно захватывать и обрабатывать все такие запросы.Я успешно настроил Apache для вызова моих сценариев, и я могу получить доступ к управляющей строке «cmd = QFT & res = 1», прочитав значение QUERY_STRING.Я использую Apache 2.4.18 в Ubuntu 16.04.5.Сценарии написаны на 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 передать всю строкупосле ?к моим сценариям?Я не могу изменить клиента или протокол, только на стороне сервера.
Редактировать: Журнал 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 "-" "-"