Java URLConnection 未设置 cookie

Java URLConnection The cookie is not set

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

网络服务器设置 session id cookie。您可以在 Chrome 中找到它,请参阅 F12 -> Application-> Cookies 并且也应该在主页中看到 headers.您可以尝试两件事:

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

使用 SeleniumChromeDriver[=27 这样的测试框架会有更高的成功机会=] 或 Gecko 用于 Mozilla。您只需指示 driver 使用您的用户登录,然后访问用户页面,然后根据需要解析页面。

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