Очевидным переносимым способом было бы установить Proxy в URL.openConnection. Прокси может находиться на локальном хосте, тогда вы можете написать очень простой прокси, который связывает локальный адрес клиентского сокета.
Если вы не можете изменить источник, к которому подключен URL, вы можете заменить URLStreamHandler при вызове конструктора URL или глобально через URL.setURLStreamHandlerFactory. Затем URLStreamHandler может делегироваться обработчику http / https по умолчанию, изменяя вызов openConnection.
Более экстремальным методом будет полная замена обработчика (возможно, расширение реализации в вашей JRE). В качестве альтернативы доступны альтернативные (с открытым исходным кодом) http-клиенты.