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 或静态网页会很简单。
使用 Selenium 和 ChromeDriver[=27 这样的测试框架会有更高的成功机会=] 或 Gecko 用于 Mozilla。您只需指示 driver 使用您的用户登录,然后访问用户页面,然后根据需要解析页面。
请记住,Instagram 政策可能不接受这两种方法,或者如果您成功了,来自您 IP 的请求将被开发团队重定向。
我正在尝试开发一个 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 或静态网页会很简单。
使用 Selenium 和 ChromeDriver[=27 这样的测试框架会有更高的成功机会=] 或 Gecko 用于 Mozilla。您只需指示 driver 使用您的用户登录,然后访问用户页面,然后根据需要解析页面。
请记住,Instagram 政策可能不接受这两种方法,或者如果您成功了,来自您 IP 的请求将被开发团队重定向。