Я пытаюсь использовать mitmproxy для адаптации запросов от клиента (агента мониторинга), который я не могу изменить.Использовать mitmproxy для перевода ключа/значения формы в сообщение тела
Клиент не может получать POST-данные, например. JSON или SOAP XML для запроса. Он может публиковать только пары имен/значений формы (или имя/значения заголовка).
Я пытаюсь обойти это ограничение:
- получает от клиента отправить форму пары: «phony_key =»
- с помощью mitmproxy удалить ключ и просто опубликовать данные
Запуск прокси с заменить выражение просто раздеть «phony_key =» выглядел хорошо первоначально
mitmproxy --replace /~bq/phony_param=/
... и произвел хороший результат, когда я вызывается запрос от завитка, что-то вроде
curl -d phony_param='<SOAP-ENV:Envelope></SOAP-ENV:Envelope> https://host:port/path
Но когда вызывается из реального клиента, запрос был отклонен сервером.
Я думаю, что это связано с тем, что полезная нагрузка данных при отправке с реального клиента устарела. Проверка запроса в mitmproxy с использованием шестнадцатеричного варианта показывает это.
0000000000 25 33 43 53 4f 41 50 2d 45 4e 56 25 33 41 45 6e %3CSOAP-ENV%3AEn
0000000010 76 65 6c 6f 70 65 2b 78 6d 6c 6e 73 25 33 41 53 velope+xmlns%3AS
0000000020 4f 41 50 2d 45 4e 56 3d 25 32 32 68 74 74 70 25 OAP-ENV=%22http%
Принимая во внимание запрос, сделанный вызовом curl, показывает некодированный XML в шестнадцатеричном представлении.
С тех пор я пытался сделать инлайн-скрипт, чтобы сделать работу
def request(context, flow):
if flow.request.method == "POST":
form = flow.request.get_form_urlencoded()
real_post = form.get("phony_param")[0]
form.__delitem__("phony_param")
print real_post
flow.request.content = real_post
flow.request.set_form_urlencoded(form)
Выше я пытаюсь удалить имя формы/значение, добавить значение к содержанию запроса и добавить обратно измененная форма. Я не думаю, что я на правильном пути, или, по крайней мере, он пока не работает.