- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类,我想在其中 Hook 和重定向 HTTP 请求。我还已经编写了一个加载器类,但它所做的只是替换了包含我想要更改的 HTTP 请求的函数。有没有办法在 Java 中 Hook HTTP 请求,以便我可以更轻松地重定向它们?有点像代理包装器。
澄清:应用程序向 URL 发出 GET 或 POST 请求。我需要内容保持不变,只需更改 URL 即可。DNS 重定向将不起作用,新服务器的主机 HTTP header 需要正确。
PS:这是一个桌面应用程序,而不是服务器脚本。
最佳答案
执行此操作的一种麻烦但可靠的方法是让您的应用程序使用代理服务器,然后编写一个代理服务器来进行您需要的更改。代理服务器可能在您的应用程序中;它不需要是一个单独的程序。
要使用代理,请设置几个 system properties - http.proxyHost
和 http.proxyPort
。然后,通过 HttpURLConnection 发出的请求将使用该代理(除非它们专门覆盖默认代理设置)。我认为,使用 Apache HttpClient 等其他方法发出的请求不会受到影响,但希望您的所有请求都使用 HttpURLConnection
。
要实现代理,如果您使用 Sun JRE,那么您可能应该使用 built-in HTTP server ;设置映射到路径“/”的单个处理程序,这将拾取您的应用程序发送的所有请求,然后可以确定将它们发送到的正确 URL,并建立到该 URL 的连接(使用所有正确的 URL)标题也是如此)。要建立连接,请使用 URL.openConnection(Proxy.NO_PROXY)
以避免向代理发出请求并陷入无限循环。然后,您需要在两个套接字之间泵送输入和输出。
我能想到的唯一其他方法是用一个新的处理程序覆盖HttpURLConnection
,该处理程序将请求引导到您想要的目的地;您需要找到一种方法来说服 URL
类使用您的处理程序而不是默认的处理程序。我不知道你如何以干净的方式做到这一点。
关于java - 我可以编写一个 Java 加载器类来在加载的类中 Hook HTTP 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903339/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!