簡體   English   中英

如何使用 javaagent 設置 HTTP header

[英]How to set HTTP header with javaagent

我正在使用 Java 庫,它在內部使用 Apache HttpClient 4.3 來發送 https 請求。 第 3 方服務器需要 'Content-Type' header 不幸的是,lib 沒有設置它。

由於更改庫不是一種選擇,我想使用 javaagents 添加 header。

我發現這個有用的教程讓我相信可以實現這一點:https://httptoolkit.tech/blog/how-to-intercept-debug-java-http/但我無法弄清楚 HttpClient 4.3 的哪個接口操作設置 header。 有人知道它是如何工作的嗎?

我想出的解決方案:使用 bytebuddy 攔截第 3 方庫使用的 Apache InternalHttpClient的“doExecute”方法。 所以我能夠添加所需的內容類型 header。

public class AgentMain {

    public static void premain(String agentArgs, Instrumentation inst) {
        new AgentBuilder.Default()
                .type(named("org.apache.http.impl.client.InternalHttpClient"))
                .transform((builder, type, classLoader, module) ->
                        builder.method(named("doExecute"))
                                .intercept(Advice.to(HttpClientAdvice.class))
                ).installOn(inst);
    }

    public static void agentmain(String agentArgs, Instrumentation inst) {
        // Not used
    }

    public static class HttpClientAdvice {
        @Advice.OnMethodEnter
        public static void doExecute(@Advice.AllArguments Object[] args) {
            final HttpRequest request = (HttpRequest) args[1];
            request.addHeader("Content-Type", "text/xml");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM