我正在开发一个登录网站的应用程序。我有问题,因为当我阅读浏览器的请求标题时,浏览器会发送一个cookie。我需要知道如何在我的应用程序中执行此操作,我的意思是,当我开始连接时,它自己定义请求的cookie。我试图使用这个df.pivot_table( \
index=['b', 'c'], columns='a', aggfunc='mean', dropna=False \
).reindex(tups)
# w
# a a1 a2 a3 a4 a5 a6 a7 a8 a9
# NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
# b1 c1 NaN NaN NaN NaN 100.0 NaN NaN NaN NaN
# c2 NaN NaN NaN NaN NaN NaN 250.615174 NaN NaN
# b2 c3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
# c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
# b3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
# NaN c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
# c5 NaN NaN NaN NaN NaN NaN NaN NaN NaN
但是没有用。
来源:
CookieHandler.setDefault( new CookieManager( null, CookiePolicy.ACCEPT_ALL ) );
申请我的申请表:
CookieHandler.setDefault( new CookieManager( null, CookiePolicy.ACCEPT_ALL ) );
URL url2 = new URL("https://m.example.com.br/login.jhtml");
HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent","User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0");
conn.setRequestProperty("Content-Length", parameters + Integer.toString(parameters.getBytes().length));
conn.setFollowRedirects(true);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(parameters);
wr.flush();
wr.close();
if (conn.getResponseCode()== 200){
InputStream in = conn.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in));
String line=null;
StringBuffer response = new StringBuffer();
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
System.out.println(response.toString());
}
请求浏览器标题:
Content-Type: application/x-www-form-urlencoded
User-Agent: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Connection: Keep-Alive
Accept-Encoding: gzip
Cookie: TS0163e05c="01ed0a5ec20a04efb37decf4185e55cfe68e06164c32f1a95d1d5b8f12c72abbee029ed64985c09681a55832e444c61821a1eb6fb22d6ed9880314fa0c342074316e309642";$Path="/";$Domain="example.com"; ps-website-switching-v2=%7B%22ps-website-switching%22%3A%22ps-website%22%7D; TS015a85bd=01ed0a5ec25aecf271e4e08c02f852e9ea6199a117a0a8e0339b3e98fd1d51518e5f09ead481039d4891f66e9cc48a13ced14792de
Content-Length: 198
注意Cookies,为什么它们如此不同?如果没有使用Host: m.example.com
Connection: keep-alive
Content-Length: 197
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux; Android 5.0.2; LG-D337 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: _ga=GA1.3.313511484.1517525889; _gid=GA1.3.507266479.1517525889; DEretargeting=563; CSASF=; JS_SESS=; BT=%3B106%3B; DN....
进行设置,我该怎样发送这样的Cookie?
答案 0 :(得分:0)
HttpURLConnection
不是一种非常可靠的网站抓取方式或互动方式:
CookieHandler
仅适用于在HTTP响应标头中直接传递给您的 的Cookie。如果网站的内容中的任何内容(包括图像等嵌入内容)会导致更多的Cookie被创建,那么您无法使用CookieHandler,因为它不了解HTML / JS /等您应该使用Selenium代替。 Selenium自动化真正的 Web浏览器(或者至少更接近真实Web浏览器的东西),它可以解析HTML并根据Web标准的期望行事。
至于使用哪个浏览器驱动程序(后端),这里有几个选项:
“无头”和“无头”之间的区别(或“无头”,如果您愿意)是无头浏览器不会创建任何GUI窗口。如果您在无头Linux机器上运行,除非您想要创建Xvfb虚拟X服务器或其他东西,否则这几乎是必需的。如果您是从具有图形界面的计算机(Windows,MacOS或桌面Linux)运行它,如果您希望在运行代码时弹出浏览器,则由您决定。
无头浏览器往往相对更快,并且您可以并行扩展它们的更多实例,因为它们在您使用它们时不占用系统上的任何图形资源。他们只是使用浏览器引擎本身来处理Web内容,并允许您通过Selenium访问/驱动它。
如果您确实想要无头,但您需要最新的网络平台功能和标准支持,请查看使用Headless Chrome或Headless Firefox。
无头Chrome简介:https://developers.google.com/web/updates/2017/04/headless-chrome
Headless Firefox简介:https://developer.mozilla.org/en-US/Firefox/Headless_mode