Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序-删除/忽略所有cookie(JSoup)_Java_Applet_Jsoup - Fatal编程技术网

Java小程序-删除/忽略所有cookie(JSoup)

Java小程序-删除/忽略所有cookie(JSoup),java,applet,jsoup,Java,Applet,Jsoup,我编写了一个Java小程序,它从单个主机的多个页面获取HTML内容,并从中提取数据。我使用Jsoup,它工作得很好,但它会自动在浏览器中为该主机集使用cookies,并在后续请求中发送新设置的cookies。(我相信这是由Java本地完成的) 我希望它在运行小程序时忽略服务器设置的所有cookie,并忽略浏览器可能已经拥有的任何cookie 我的代码非常简单 String url = "http://example.com/my/web-page.html"; Document document

我编写了一个Java小程序,它从单个主机的多个页面获取HTML内容,并从中提取数据。我使用Jsoup,它工作得很好,但它会自动在浏览器中为该主机集使用cookies,并在后续请求中发送新设置的cookies。(我相信这是由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.
stringurl=”http://example.com/my/web-page.html";
Document Document=Jsoup.connect(url.userAgent(“”.get());
//使用org.Jsoup.nodes.document.select()等从文档中提取数据。
这在多个URL中重复,所有URL都具有相同的主机(example.com)

总之,我基本上希望它:

  • 忽略浏览器中可能设置的任何cookies,例如.com
  • 如果服务器在小程序发出请求时设置了任何新cookie,则在后续请求中忽略它。如果可能,还可以阻止cookie存储在浏览器中
  • 我已经搜索了很多,但没有找到解决方案。我真的非常感谢任何帮助。我不介意使用ApacheHttpClient或任何其他第三方库,但我更愿意这样做,这样我就可以保持小程序的文件大小


    提前感谢:)

    您应该操作
    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);
        }
    
    stringurl=”http://example.com/my/web-page.html";
    Connection con=Jsoup.connect(url.userAgent)(“”);
    ...
    con.get();
    ...
    请求=con.Request();
    映射cookies=request.cookies();
    对于(字符串cookieName:cookies.keySet()){
    //筛选您要留在地图中的Cookie
    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-因为你最终会在受限环境中“重新发明轮子”。

    而不是使用
    连接(从
    Jsoup.connect(“url”);
    方法返回的结果),使用
    响应

    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();
    
    Map cookies=new HashMah();
    响应res=Jsoup
    .connect(“url”)
    .饼干(饼干)
    .userAgent(“userAgent”)
    .method(method.GET)//或任何需要的方法
    .execute();
    

    我知道这是一条很大的生产线,但这会很好。

    不知道Jsoup是否处理cookie管理。ApacheHttpClient有一个很好的cookie管理api。您可以使用它获取页面并将页面发送给jsoup进行解析;相反foreach确实是在浪费时间和处理。如果你看看它是如何实现的,你会发现
    HttpConnection.cookies(null)
    将不起作用,因为它不能
    null
    :(
    Validate.notNull(cookies,“Cookie映射不能为null”);for(map.Entry条目:cookies.entrySet(){
    )的确!我的错误。你应该使用空白映射,如map cookies=new HashMap();在发布此问题之前,我尝试了完全相同的方法(包括请求和响应),但我没有注意到任何差异。它不起作用。我想这是因为cookies()方法不会替换Cookie,它只会从映射中添加Cookie,因此将空映射传递给它不会有任何作用,或者至少我是这么认为的。我想我确实需要使用HttpClient。不过,非常感谢您的努力。