How do I do HTTP Purge from Java?
http-method, httpurlconnection, java, varnish
Solution
You can use Apache's HttpClient library: http://hc.apache.org/httpcomponents-client-ga/
You can either use BasicHttpRequest or implement your own HttpPurge class extending HttpRequestBase.
You can find a quick-start guide here: http://hc.apache.org/httpcomponents-client-ga/quickstart.html
Example:
DefaultHttpClient httpclient = new DefaultHttpClient();
BasicHttpRequest httpPurge = new BasicHttpRequest("PURGE", "www.somehost.com")
HttpResponse response = httpclient.execute(httpPurge);
Problem
I'm trying to perform a PURGE with HttpUrlConnection like this: ``` private void callVarnish(URL url) { HttpURLConnection conn = null; try { conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(PURGE_METHOD); conn.setDoOutput(true); conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Host", "www.somehost.com"); conn.connect(); System.out.print(conn.getResponseCode() + " " + conn.getResponseMessage()); } catch (Exception e) { log.error("Could not call varnish: " + e); } finally { if (conn != null) { conn.disconnect(); } } } ``` But I'm getting: ``` 08:56:31,813 ERROR [VarnishHandler] Could not call varnish: java.net.ProtocolException: Invalid HTTP method: PURGE ``` With curl there is no problem: curl -I -X PURGE -H "Host: www.somehost.com" someurl ``` HTTP/1.1 404 Not in cache. Server: Varnish Content-Type: text/html; charset=utf-8 Retry-After: 5 Content-Length: 401 Accept-Ranges: bytes Date: Thu, 18 Oct 2012 06:40:19 GMT X-Varnish: 1611365598 Age: 0 Via: 1.1 varnish Connection: close X-Cache: MISS ``` So how do I do this? Do I need to curl from Java or is there some other library that I can use?