0

我有以下课程:

public class GetHtmlContent {

    public static String GetHtml(){

        String content = null;
        URLConnection connection = null;

        try {
            connection =  new URL("https://www.tomshardware.com/").openConnection();
            Scanner scanner = new Scanner(connection.getInputStream());
            scanner.useDelimiter("\\Z");
            content = scanner.next();
        }catch ( Exception ex ) {
            ex.printStackTrace();
        }
        return content;
    }
}

我该怎么做才能让每个请求都被视为NEW,就像我在 Chrome 的隐身模式下一样

注意:该站点只是一个示例

4

4 回答 4

4

如果没有任何特定的附加设置,您的代码不应传输 cookie。

最好使用 HTTPS 代理进行测试。因此,如果您的代码如下所示:

public static void main(String[] args) {
    GetHtml();
    GetHtml();
    GetHtml();
}

您可以在所有三个调用中看到没有传输 cookie。

没有特殊设置就没有 cookie

添加 CookieHandler

如果您要添加这样的 cookie 处理程序:

public static void main(String[] args) {

    CookieManager cookieManager = new CookieManager();
    CookieHandler.setDefault(cookieManager);

    GetHtml();
    GetHtml();
    GetHtml();
}

那么情况就不同了。只有在第一次调用中没有 cookie,在第一次调用之后,进一步的调用正在传输 cookie。

带有 cookie 处理程序的 cookie

推荐

因此建议设置一个代理来查看您的程序正在传输的实际数据。

于 2019-05-05T16:36:37.560 回答
0

首先,重要的是要了解 Chrome 的隐身模式是如何 工作的:

  • Chrome 不会保存您的:浏览历史记录、cookie 和网站数据,或在表单中输入的信息。
  • 您下载的文件和您创建的书签将被保留。
  • 您访问的网站、您的雇主或学校或您的互联网服务提供商*不会隐藏您的活动*。

A URLConnection,一般来说,不会:

  • 保存浏览历史
  • 保存 cookie 和站点数据(您可以使用CookieManager保存 cookie )
  • 保存表格中输入的信息

默认情况下,它也不保存或下载文件。书签在这里也不相关。

此外,重要的是要了解隐身模式与 VPN 不同——您的 ISP、您浏览的站点等都可以看到您计算机的 IP 地址、浏览器的代理字符串等。

所以从网络的角度来看,请求的“新鲜感”更像是一种幻觉。但是,在隐身模式下,本地不会保留有关您的浏览会话的任何内容,因此,如果您在公共机器上登录到您的银行帐户(恕我直言,您永远不应该这样做),使用隐身模式会更安全,因为只要您关闭隐身窗口,您的所有会话信息都将被清除,并且该公共机器的其他用户无法访问它。

因此,简而言之,在使用URLConnection. 事实上,反之亦然:您需要编写额外的代码来让 Java 程序记住它迄今为止访问过的链接或保留 cookie 等。

于 2019-05-11T04:10:33.753 回答
0

Chrome 和 Chrome 隐身模式之间的唯一区别是它不共享 cookie 和其他存储机制。处于隐身模式的 Chrome 也不会保留任何内容,因此一旦 Chrome 关闭,该网站可能试图存储在您的浏览器中的任何内容都将丢失。

换句话说,当您创建新连接并且不发送任何以前的 cookie 时,它​​类似于隐身模式。请注意,只要保持连接,就可以发送 cookie。

我不确定您的意图是什么,但请注意,网站可以有其他方法来检测重复连接,例如 IP、用户代理版本(如果提供)、操作系统(如果提供)等。

于 2019-05-10T22:08:08.970 回答
0

尝试将缓存设置为 false。

connection.setUseCaches(false);
于 2019-05-09T10:23:59.220 回答