Громоздким, но надежным способом сделать это было бы заставить ваше приложение использовать прокси-сервер, а затем написать прокси-сервер, который вносит необходимые изменения. В вашем приложении может быть прокси-сервер; это не должно быть отдельной программой.
Чтобы использовать прокси, задайте пару системных свойств - http.proxyHost
и http.proxyPort
. Запросы, сделанные через HttpURLConnection
, будут затем использовать этот прокси-сервер (если только они не переопределяют настройки прокси-сервера по умолчанию). Запросы, сделанные с использованием другого метода, такого как Apache HttpClient, не будут затронуты, я думаю, но, надеюсь, все ваши запросы используют HttpURLConnection
.
Для реализации прокси-сервера, если вы используете Sun JRE, вам, вероятно, следует использовать встроенный HTTP-сервер ; установите один обработчик, сопоставленный с путем "/", и он будет отбирать все запросы, отправляемые вашим приложением, а затем может определить правильный URL-адрес для отправки и установить соединение с этим URL-адресом (со всеми заголовки тоже). Чтобы установить соединение, используйте URL.openConnection(Proxy.NO_PROXY)
, чтобы избежать запроса к прокси и, таким образом, попасть в бесконечный цикл. Затем вам нужно будет накачать вход и выход между двумя гнездами.
Единственный другой способ сделать это - переопределить HttpURLConnection
с помощью нового обработчика, который направляет запросы в желаемое место назначения; вам нужно найти способ убедить класс URL
использовать ваш обработчик вместо используемого по умолчанию. Я не знаю, как бы вы сделали это чисто.