【问题标题】:How to set HTTP header with javaagent如何使用 javaagent 设置 HTTP 标头
【发布时间】:2021-06-29 01:42:49
【问题描述】:
【问题讨论】:
标签:
java
apache-httpclient-4.x
content-type
javaagents
【解决方案1】:
我想出的解决方案:使用 bytebuddy 拦截第三方库使用的 Apache InternalHttpClient 的 'doExecute' 方法。所以我能够添加所需的内容类型标题。
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");
}
}
}