まず、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ライブラリでも非常に実行可能であると確信しています