xasdfg 2011-03-11
1.在squid.conf文件里添加
acl Purge method PURGE acl Localhost src 192.168.1.1/10 //你的前端服务器IP地址,如Nginx服务器IP http_access allow Purge Localhost http_access deny Purge
2.squid.properties
servers=192.168.1.1:3128
3.PurgeManager.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.Properties; public class PurgeManager { String[] servers = {}; private static PurgeManager pm = null; public synchronized static PurgeManager getInstance() { if (pm == null) { pm = new PurgeManager(); } return pm; } private PurgeManager() { InputStream inputStream = this.getClass().getResourceAsStream("squid.properties"); Properties p = new Properties(); try { p.load(inputStream); } catch (IOException e1) { e1.printStackTrace(); } String ipstr = p.getProperty("servers"); System.out.println("ipstr=========" + ipstr); if (ipstr != null) { servers = ipstr.split(";"); } try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } public String purgeSquid(String url) { String msg = ""; System.out.println("PURGE " + url); for (int i = 0; i < servers.length; i++) { String t[] = servers[i].split(":"); if (t.length == 1) doOneSquid(t[0], url); else doOneSquid(t[0], url, Integer.parseInt(t[1])); } return msg; } private String doOneSquid(String serverip, String purl) { return doOneSquid(serverip, purl, 80); } private String doOneSquid(String serverip, String purl, int port) { String message = ""; // 获取hostname String hname = parseHostNameFromUrl(purl); try { Socket s = new Socket(serverip, port); InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter(new OutputStreamWriter(os), true); String state = "PURGE " + purl + " HTTP/1.1"; out.println(state); out.println("HOST:" + hname); out.println(); String downstr; while ((downstr = in.readLine()) != null) { System.out.println(downstr); message += downstr + "<br>"; } s.close(); } catch (Exception e) { e.printStackTrace(); message += "<br>操作失败!"; } return message; } private String parseHostNameFromUrl(String purl) { if (purl == null) return ""; int idx1 = 0; int idx2 = 0; if (purl.toLowerCase().startsWith("http://")) { idx1 = 7; } idx2 = purl.indexOf("/", idx1); if (idx2 == -1) idx2 = purl.length(); return purl.substring(idx1, idx2); } public static void main(String[] args) { //System.out.println(PurgeManager.getInstance(). //parseHostNameFromUrl("db.com")); PurgeManager.getInstance().purgeSquid(http://192.168.1.1:3128/index.html); } }