【问题标题】:Java URLConnection The cookie is not setJava URLConnection cookie 未设置
【发布时间】:2021-11-27 20:12:47
【问题描述】:

我正在尝试开发一个 instagram 刮板;这是我的代码:

 try {
            
            
            System.out.println("search in https://instagram.com/" + txtUsername.getText() + "?__a=1");
            URLConnection connection = new URL("https://instagram.com/" + txtUsername.getText() + "?__a=1").openConnection();
            
            
            
            /*connection
                    .setRequestProperty("User-Agent",
                            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");*/
            connection
                    .setRequestProperty("Cookie",
                            "sessionid=XXXXXXXXXXXXXXXXXXXXX"); //setting cookie
 
            connection.connect();
            
            BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream(),
                    Charset.forName("UTF-8")));
            
            StringBuilder sb = new StringBuilder();
            String line;
            while (r.readLine() != null) {
                    sb.append(r.readLine());
                
            }
            System.out.println(sb.toString());
        } catch (MalformedURLException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }

因此,我尝试设置会话 cookie 来模拟登录并能够查看用户页面以获取数据(关注者、关注者等来自此链接 https://www.instagram.com/username/?__a=1 )。问题是 cookie 没有设置,事实上我在控制台上的输出中收到的是 instagram 登录页面的源代码,这意味着 cookie 不存在(或者会话错误但我确定这是正确的 )。如何解决这个问题,然后设置 cookie?

【问题讨论】:

    标签: java cookies urlconnection


    【解决方案1】:

    网络服务器设置会话 id cookie。您可以在 Chrome 中找到它,参见 F12 -> Application-> Cookies,也应该在主页标题中看到它。你可以尝试两件事:

    如果你想用java core模拟登录,你需要用setRequestProperty设置你的浏览器发送的大部分参数(在Chrome中见F12 -> 网络 -> 标头 -> 请求标头)当您发出登录请求并设置初始会话时。但这种方法可能行不通,因为大型企业 Web 应用程序中存在多层安全性。使用简单的 API 或静态网页会很简单。

    成功几率更高的是使用测试框架,例如 SeleniumChromeDriverGecko 用于 Mozilla。您只需指示驱动程序使用您的用户登录,然后访问用户页面,然后根据需要解析页面。

    请记住,Instagram 政策可能不会接受这两种方法,或者如果您成功了,来自您 IP 的请求将被开发团队重定向。

    【讨论】:

    • 我在开发者工具中找不到标题部分
    • 如果您有 NPP 或将 Intellij 与正则表达式一起使用,您可以执行以下操作(但使用所有标题):i.ibb.co/PmStN3G/npp.png 我看到 Instagram 加密密码,因此您可以查看 ig_web_client_password_encryption 在他们的 javascript 代码中。
    • 这是您获取初始标头和 cookie 的地方(解析的 result):Cookie.
    • 我正在使用 netbeans,所以恐怕无法验证 cookie 设置
    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2010-11-30
    • 2015-06-22
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多