Вопрос или проблема
Я ищу простой прокси для Linux/Ubuntu, единственная цель которого – записывать запросы и ответы из HTTP-транзакции.
Я пишу приложение, которое не будет работать в веб-браузере, но будет общаться с веб-сервером. Я хочу имитировать, чтобы узнать, как правильно отправить запрос на мой веб-сервер, изучая действительную транзакцию между веб-браузером и веб-сервером.
Это приложение будет работать на Arduino, и эта программа будет написана на C, поэтому я не могу полагаться на сложные библиотеки и высокоуровневые инструменты, такие как curl или python с BeautifulSoup, например. Представьте себе это как крошечный HTTP-браузер, который не отображает HTML-код, а только отправляет запросы и понимает ответ.
Мне удалось использовать netcat
в режиме прослушивания, чтобы захватывать данные, отправляемые браузером, поэтому мое приложение уже может отправлять что-то подобное, но у меня проблемы с тем, чтобы узнать, каков правильный ответ, который возвращает веб-сервер. Мое приложение должно понимать, что происходит, и делать следующий шаг.
Я использую Postman для отправки запросов. Postman замечательно подходит для этого. Проблема с Postman в том, что я не могу просмотреть ответ в виде необработанных данных. Он дает мне тело ответа, но не заголовок ответа.
Я ищу прокси, который может выводить необработанные данные где-то, как запросы, так и ответы, с полным заголовком и телом, как необработанные данные.
Я хотел бы видеть что-то вроде этого:
PUT /testAuth.php HTTP/1.1
Authorization: Basic Y291cmFnZTpkb2c=
User-Agent: PostmanRuntime/7.15.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 7a4c180f-d893-4e7d-8375-a4dfd7b5663e
Host: localhost:80
accept-encoding: gzip, deflate
content-length: 0
Connection: keep-alive
HTTP/1.1 200 OK
Date: Thu, 04 Jul 2019 20:24:08 GMT
Server: Apache/2.4.38 (Ubuntu)
Content-Length: 36
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
<h1>Здравствуйте, аутентифицированный пользователь.</h1>
Я думаю, что понимание всего HTTP-протокола путем чтения спецификации протокола займет очень много времени, прежде чем я смогу это сделать самостоятельно. Я думаю, что могу сэкономить время, просто имитируя GET/PUT/POST запрос, отправленный Postman, и увидев, что я должен ожидать в ответе.
Итак, я подумал о прокси, который может выводить как запрос, так и ответ и использовать эту информацию как шаблон для построения моих собственных запросов и парсинга ответа.
Спасибо заранее.
PS: В данный момент я использую telnet для общения с браузером и получения ответа. Проблема в том, что мне нужно копировать запрос откуда-то и вставлять его в telnet. А затем я получаю ответ, и соединение закрывается. Это работает, в каком-то роде. Но я хочу использовать Postman для создания моих запросов и получения ответа, а детали видеть в другом месте.
Я нашел mitmproxy (https://mitmproxy.org/), который отлично подошел для инспекции http-потока!
С наилучшими пожеланиями,
Ответ или решение
Для записи HTTP-транзакций на вашем Linux/Ubuntu устройстве можно воспользоваться mitmproxy, который обеспечивает все необходимые функции для анализа HTTP-запросов и ответов. Вот подробная инструкция, как это сделать.
Установка mitmproxy
-
Установка mitmproxy:
Вы можете установить mitmproxy с помощью пакетного менеджераapt
. Для этого выполните следующую команду в терминале:sudo apt update sudo apt install mitmproxy
-
Запуск mitmproxy:
После установки вы можете запустить mitmproxy в терминале следующим образом:mitmproxy --mode transparent
Параметр
--mode transparent
позволяет использовать mitmproxy как прозрачный прокси, что позволяет вам захватывать данные без необходимости настройки браузера.
Настройка системы
Чтобы перенаправить HTTP-трафик через mitmproxy, необходимо изменить настройки вашего устройства или приложения:
-
Изменение конфигурации приложения:
Если вы используете Postman или другое приложение, убедитесь, что оно настроено на использование mitmproxy в качестве прокси. Вам нужно указать адресhttp://127.0.0.1:8080
в настройках прокси. -
Сертификация:
Для захвата HTTPS-трафика вам нужно установить сертификат mitmproxy. Запустите mitmproxy и перейдите по адресуhttp://mitm.it
в вашем браузере, это позволить вам скачать и установить сертификат.
Анализ HTTP-транзакций
После настройки mitmproxy, вы сможете видеть все HTTP-запросы и ответы, отправляемые через Postman или любое другое приложение, которое использует прокси. Каждый запрос и ответ будут отображаться в консоли mitmproxy в своем исходном виде, включая заголовки и тело.
Примеры вывода
Вам нужно будет искать похожие на приведенные ниже записи:
PUT /testAuth.php HTTP/1.1
Authorization: Basic Y291cmFnZTpkb2c=
User-Agent: PostmanRuntime/7.15.0
Accept: */*
Host: localhost:80
Connection: keep-alive
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 36
<h1>Hello, Authenticated User.</h1>
Дополнительные функции
mitmproxy предоставляет множество возможностей, включая фильтрацию запросов, сохранение сессий, автоматизацию и многое другое. Ознакомьтесь с его документацией на официальном сайте mitmproxy для получения информации о дополнительных параметрах и командах.
Заключение
Используя mitmproxy, вы сможете эффективно записывать, анализировать и учить правильные HTTP-запросы для вашей C-программы на Arduino. Это поможет вам избежать длиного изучения спецификаций HTTP и сэкономит время на разработку вашего приложения.