繁体   English   中英

Java Applet-删除/忽略所有cookie(JSoup)

[英]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)。

总而言之,我基本上希望它:

  1. 忽略example.com中可能在浏览器中设置的任何cookie。
  2. 如果在applet发出请求时服务器设置了任何新的cookie,则对于后续请求将忽略它。 如果可能,也阻止cookie被存储在浏览器中。

我已经搜索了很多,却找不到解决方案。 非常感谢您的帮助。 我不介意使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM