[英]Java applet - delete/ignore all cookies (JSoup)
我编写了一个Java小程序,它可以从单个主机的多个页面中获取HTML内容,并从中提取数据。 我使用的是Jsoup,它运行良好,但是它会自动在浏览器中对该主机集使用cookie,并在后续请求中发送新设置的cookie。 (我相信这是由Java本地完成的)
我希望它在运行小程序时忽略服务器设置的所有cookie,并忽略浏览器可能已经具有的所有cookie。
我的代码很简单。
String url = "http://example.com/my/web-page.html";
Document document = Jsoup.connect(url).userAgent("<hard-coded static value>").get();
// Extract data from document with org.Jsoup.nodes.Document.select(), etc.
重复多个URL,每个URL具有相同的主机(example.com)。
总而言之,我基本上希望它:
我已经搜索了很多,却找不到解决方案。 非常感谢您的帮助。 我不介意使用Apache HTTPClient或任何其他第三方库,但我不想这样做,这样可以使applet的文件大小保持较小。
在此先感谢一吨:)
您应该为此操作org.jsoup.Connection.Request
:
String url = "http://example.com/my/web-page.html";
Connection con = Jsoup.connect(url).userAgent("<hard-coded static value>");
...
con.get();
...
Request request = con.request();
Map<String, String> cookies = request.cookies();
for(String cookieName : cookies.keySet()) {
//filter cookies you want to stay in map
request.removeCookie(cookieName);
}
您还应该禁用followRedirects
并手动进行重定向(删除cookie)。 您将必须实现自己的“ Cookie /域删除器”。
JSoup
内部使用java.net.HttpURLConnection
,因此您无法以某种方式截获org.jsoup.helper.HttpConnection.Response.execute(...)
上实际调用execute
方法的核心功能,因为它是静态的并且具有程序包保护的访问。 同样,您不能在HttpConnection
设置req
(请求专用对象)和res
(响应专用对象)。 而且,您无法实现自己的org.jsoup.Connection
(或由于private
构造函数而扩展了其实现HttpConnection
),因此强制JSoup使用它。
考虑到以上所有问题,我建议-使用HttpClient / HtmlUnit-因为您最终将在受限环境中最终“重新发明轮子”。
而不是使用Connection
(从Jsoup.connect("url");
方法返回的结果),请使用Response
Map<String, String> cookies = new HashMah<String, String>();
Response res = Jsoup
.connect("url")
.cookies(cookies)
.userAgent("userAgent")
.method(Method.GET) //Or whatever method needed be
.execute();
我知道这是一条很大的路线,但那会很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.