首先,我沒有看到爲什麼Apache HttpClient無法做到這一點。您是否配置客戶端使用'http.route.default-proxy'參數通過代理執行請求?
無論如何,如果你不介意使用較低的成分,這是怎麼同樣可以使用Apache的HttpCore完成(阻塞)
HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
new RequestContent(),
new RequestTargetHost(),
new RequestConnControl(),
new RequestUserAgent()});
HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();
HttpContext context = new BasicHttpContext();
HttpHost target = new HttpHost("www.cached", port);
HttpHost proxy = new HttpHost("squid", 8080);
HttpParams params = new BasicHttpParams();
HttpRequest request = new BasicHttpRequest("PURGE", "www.cached:port/params");
DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
try {
if (!conn.isOpen()) {
Socket socket = new Socket(proxy.getHostName(), proxy.getPort());
conn.bind(socket, params);
}
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, target);
httpexecutor.preProcess(request, httpproc, context);
HttpResponse response = httpexecutor.execute(request, conn, context);
httpexecutor.postProcess(response, httpproc, context);
// do something useful with the response
if (!connStrategy.keepAlive(response, context)) {
conn.close();
} else {
// Connection could be kept alive
}
} finally {
conn.close();
}
}
我相信同樣是非常可行的與其他HTTP庫
你有沒有看過https://netty.io/? – ollins
它可以工作。我可以在DefaultHttpRequest上覆蓋toString。明天會試着去做。 – Alex