我正在使用Netty来实现ICAP 1.0.1.GA
但无法实现有效的解决方案。有没有人用过它并找到了解决方案?http://icap.io/网站上的文档链接也不起作用。
我的要求是检查病毒请求中的附件。
任何帮助或正面行动都会很棒!提前谢谢。
发布于 2014-01-19 22:48:53
下面的示例为ICAP服务器打开一个套接字,为套接字准备一个Out流和一个In流。然后准备一个ICAP头,并将其写在输出流上。来自ICAP服务器的响应将被写入In流。读它,并使用它,你想要。您可以根据需要使用RESPMOD、REQMOD代替选项。下面的代码将返回ICAP服务器提供的选项。
ICAP的REQMOD、RESMOD头可以是
String requestBuffer =
"RESPMOD icap://"+serverIP+"/"+icapService+" ICAP/"+VERSION+"\r\n"
+"Host: "+serverIP+"\r\n"
+"User-Agent: "+USERAGENT+"\r\n"
+"Allow: 204\r\n"
+"Preview: "+previewSize+"\r\n"
+"Encapsulated: res-hdr=0, res-body="+resBody.length()+"\r\n"
+"\r\n"
+resBody
+Integer.toHexString(previewSize) +"\r\n";您可以使用上面的标题从ICAP服务器获得响应。您可以将文件写入需要发送到ICAP服务器的Out流。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
public class MyTestICAPClient {
public static void main(String[] args) {
Socket socket = null;
Writer out = null;
BufferedReader in = null;
try {
socket = new Socket("10.4.255.101", 1344);//ICAP server address/port
out = new OutputStreamWriter(socket.getOutputStream(), "ISO-8859-1");
out.write("OPTIONS icap://10.4.255.101/avscan ICAP/1.0" + "\r\n"
+ "Host: 10.4.253.100"+"\r\n"
+ "User-Agent: IT-Kartellet ICAP Client/0.9"+"\r\n"//your User-Agent
+ "Encapsulated: null-body=0\r\n"
+ "\r\n");
out.write("\r\n");
out.flush();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
out.close();
in.close();
socket.close();
}catch(Exception exp){
exp.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}发布于 2014-01-19 06:53:46
JBoss Netty的ICAP编解码可能对您很有用,尽管它现在似乎没有被维护。
https://stackoverflow.com/questions/21176496
复制相似问题