我正在尝试使用HttpUrlConnection执行PURGE,如下所示:
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();
}
}
}
但是我得到了:
08:56:31,813 ERROR [VarnishHandler] Could not call varnish: java.net.ProtocolException: Invalid HTTP method: PURGE
卷曲没有问题:
curl -I -X PURGE -H“主持人: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
那我该怎么做?我是否需要从Java卷曲或是否有其他我可以使用的库?
解决方法
您可以使用Apache的HttpClient库:
http://hc.apache.org/httpcomponents-client-ga/
您可以使用BasicHttpRequest或实现自己的扩展HttpRequestBase的HttpPurge类.
你可以在这里找到一个快速入门指南:http://hc.apache.org/httpcomponents-client-ga/quickstart.html
例:
DefaultHttpClient httpclient = new DefaultHttpClient();
BasicHttpRequest httpPurge = new BasicHttpRequest("PURGE","www.somehost.com")
HttpResponse response = httpclient.execute(httpPurge);