httpclient绕过登陆验证码抓取数据
- 格式:docx
- 大小:103.74 KB
- 文档页数:3
安卓HttpClient+Jsoup+Httpwatch模拟登陆正方教务获取信息分类: android | 标签: 安卓,爬虫| 作者: u013082133 相关| 发布日期 : 2014-10-03 | 热度 : 1107°目录[+]之前想要写一下关于爬数据的文章的,发现时间有点急迫。
所以今天在期末考试之前写完跟大家分享一下的我的心得,先上之前的图。
今天我也以正方教务体统抓取成绩的例子来给大家讲解,第一次写博客,可能会写的不会,还请大家谅解,不过保证大家看的懂,请耐心看完。
好了,下面开始!!!第一步:登陆你们的教务,这是我们学习的教务的主页/,进去之后,打开httpWatch,至于没用过的话,自己去研究下,因为里面有将我们需要的Post参数和Post地址都归纳出来的,很好用。
如图:进去之后你会看见HttpWatch刷刷的,出来一大片数据,当然我们的从当中挑选出有用的数据。
如图,我们打开上栏中的第一列标签,就是横线的地方。
首先我们来观看下数据,请求方法:post,状态值:302,请求的URL:/default2.aspx。
然后,我们来观察下面大圈圈中的数据,这里是Post所带的参数,里面有__ViewStat(我也不知道是什么,不过一起带着Post就好了,这里有个情况,我等会在下面讲,先用绿色标记),Button的值(乱码),lbLanguage(不管,先记下),RadioButtonList1(单选按钮:学生...),TextBox1:账号,TextBox2:密码。
Ok.......下面我们来看一下Button和lbLanguage和RadioButtonList1具体的值,下面的标签打开Stream,如图:看,里面有一些不认识的参数的值。
Button="" ,lbLanguage="",RadioButtonList1="%D1%A7%C9%FA",哦了。
1、登录验证漏洞
(1)绕过登录验证直接进入其他页面漏洞。
假如网站的页面没有对用户是否正常登录进行验证,那么攻击者在收集到网站的页面路径和文件名后,直接在地址栏输入URL路径,就可以进入页面而不需要验证。
这个漏洞使得任何人都可以拥有正当用户的权利。
(2)登录验证页面漏洞。
对于网站的登录页面,在验证用户名和密码时,都是通过判定用户输入的用户名和密码是否存于数据库中来进行。
但是假如程序设计得不严谨,则会泛起漏洞。
2、SQL注入漏洞
假如在设计网页时,没有对用户输入数据的正当性进行判定,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL 注入。
3、文件上传漏洞
诸如论坛、同学录等网站系统都提供了文件上传功能,但在网页设计时假如缺少对用户提交参数的过滤,将使得攻击者可以上传网页木马等恶意文件,导致攻击事件的发生。
本文由:(修改注单)整理发布。
绕过web应用验证架构的方法绕过web应用验证架构是指通过一些特定的方法和技巧,绕过网站的验证机制,获取未经授权的访问权限。
本文将介绍一些常见的绕过web应用验证架构的方法,并探讨如何提高web应用的安全性。
1. SQL注入SQL注入是一种常见的绕过web应用验证的方法。
攻击者通过在用户输入的数据中注入恶意SQL命令,从而绕过验证,获取数据库中的敏感信息。
为了防止SQL注入,开发人员应该使用参数化查询或预编译语句来处理用户输入的数据,避免直接拼接SQL语句。
2. XSS攻击跨站脚本攻击(XSS)是一种绕过web应用验证的方法,攻击者通过在网页中插入恶意脚本,获取用户的敏感信息。
为了防止XSS攻击,开发人员应该对用户输入的数据进行过滤和转义,确保用户输入的数据不会被执行。
3. CSRF攻击跨站请求伪造(CSRF)是一种绕过web应用验证的方法,攻击者通过伪造合法用户的请求,使用户在不知情的情况下执行恶意操作。
为了防止CSRF攻击,开发人员应该在关键操作中使用CSRF令牌,并对请求进行验证。
4. 文件上传漏洞文件上传漏洞是一种绕过web应用验证的方法,攻击者通过上传恶意文件,执行恶意代码,获取服务器的控制权。
为了防止文件上传漏洞,开发人员应该对用户上传的文件进行严格的验证和过滤,限制上传文件的类型和大小。
5. 密码猜测密码猜测是一种基于暴力破解的绕过web应用验证的方法,攻击者通过尝试不同的用户名和密码组合,获取合法用户的访问权限。
为了防止密码猜测,开发人员应该要求用户设置强密码,并采用账户锁定、登录失败次数限制等机制来防止暴力破解。
6. 会话劫持会话劫持是一种绕过web应用验证的方法,攻击者通过获取用户的会话标识,冒充合法用户进行操作。
为了防止会话劫持,开发人员应该使用HTTPS协议传输敏感信息,对会话标识进行加密和验证,定期更新会话标识。
7. URL跳转攻击URL跳转攻击是一种绕过web应用验证的方法,攻击者通过构造恶意URL,引导用户跳转到其他网站或执行恶意操作。
登录绕过原理登录绕过原理登录绕过是指在未经授权的情况下,通过一些技术手段绕过系统的登录验证,直接进入系统内部。
这种行为通常被黑客用来进行非法入侵、窃取敏感信息等活动。
本文将详细介绍登录绕过的原理及其相关技术手段。
一、登录验证机制在了解登录绕过原理之前,我们需要先了解系统的登录验证机制。
一般来说,系统的登录验证机制包括两个步骤:身份认证和权限控制。
1. 身份认证身份认证是指用户向系统提供自己的身份信息,并由系统对该信息进行验证以确定用户是否合法。
常见的身份认证方式包括:(1)用户名密码认证:用户通过输入用户名和密码进行身份认证。
(2)数字证书认证:用户使用数字证书进行身份认证,数字证书通常由第三方机构颁发。
(3)生物特征识别:用户使用生物特征(如指纹、面部识别等)进行身份认证。
2. 权限控制权限控制是指系统根据用户的身份和角色来限制其对资源的访问权限。
常见的权限控制方式包括:(1)访问控制列表(ACL):ACL是一种基于对象级别的权限控制方式,通过为每个对象设置访问权限来实现对用户的控制。
(2)角色级别访问控制(RBAC):RBAC是一种基于角色的权限控制方式,将用户分为不同的角色,并为每个角色设置不同的权限。
二、登录绕过原理了解了系统的登录验证机制之后,我们来看看登录绕过的原理。
一般来说,登录绕过可以通过以下两种方式实现:1. 暴力破解暴力破解是指黑客使用程序或工具对系统进行大量尝试,直到找到正确的用户名和密码组合为止。
这种方式需要耗费大量时间和计算资源,但成功率较高。
2. 漏洞利用漏洞利用是指黑客利用系统中存在的漏洞来绕过登录验证。
常见的漏洞包括:(1)SQL注入漏洞:黑客通过在登录表单中注入恶意代码,从而绕过身份认证。
(2)文件上传漏洞:黑客通过上传恶意文件,在服务器上执行代码并获取管理员权限。
(3)会话劫持:黑客通过获取合法用户的会话ID,从而模拟该用户进行操作。
三、登录绕过技术手段除了上述两种基本原理外,还有一些高级技术手段可以用来实现登录绕过。
⽹络安全从⼊门到精通(第⼋章-1)验证码绕过、密码找回漏洞本⽂内容:验证码作⽤验证码绕过验证码绕过⽅向密码找回漏洞密码找回渠道密码找回产⽣的漏洞逻辑漏洞:不是发⽣在代码层⾯的错误,⽽是逻辑层⾯的错误。
1,验证码作⽤: 验证码:是⼀种区分⽤户是计算机还是⼈类的全⾃动公共程序,就是⽣成问题,这个问题必须只能⼈类才能解答。
防⽌:恶意破解密码、刷票、论坛灌⽔,有效防⽌某个⿊客对某⼀个特定注册⽤户⽤特定程序暴⼒破解的⽅式不断登录尝试。
2,验证码绕过: 设置了验证码并不是安全可靠,在很多情况下存在验证码绕过的情况。
如:[登录] ⼀、前端验证码验证,并没有后端验证,直接抓包然后进⾏跑数据包,⽅正⼜没有验证的阻碍。
⼆、验证码设置了,但是没有校验,乱输验证码也能成功登录。
三、验证码可以重复使⽤,⽐如,现在验证码是aaaa,登录失败后,验证码改变,但是你再输⼊aaaa,却登录成功。
[常见] 四、验证码控制绕过,⽐如,抓包,将验证码的传参删除,验证码就失效了。
[常见] 五、验证码可控制,⽐如它的验证码包含在URL⾥,是⼀个URL传参,那么验证码就可以控制。
六、验证码有规则,⽐如是时间戳的后6位[rand函数进⾏随机数]。
七、万能验证码,验证码⽆论是什么,只要输⼊000000就能直接绕过。
⼋、验证码有的时候会藏在COOKIE⾥,分析⼀下,是不是存在验证码的参数。
3,验证码绕过⽅向: ⼀、通过验证码逻辑⼊⼿。
⼆、通过Python、Golang等程序⾃动识别⼊⼿。
注意:遇到验证码逻辑漏洞,可以提交弱密码和验证码逻辑漏洞。
4,密码找回漏洞: 有⼀类验证码,它并不是区分⽤户是计算机还是⼈类的公共全⾃动程序,它是⽤来证明你的⾝份的。
⽐如你登录微信、⽀付宝⽀持短信验证码登录,像这类验证码它实际上是⽤来区分你的⾝份的。
5,密码找回渠道: ⼀、往邮箱返送明⽂或密⽂的密码或者验证码[⼿机短信验证就是往你⼿机号码发验证码]通过这样的⽅式来判断是不是本⼈。
如何绕过验证码⽅式总结
1、绕过验证码。
跳过验证码直接访问需要的页⾯内容。
2、请求头中⾃带验证码。
有些⽹站的验证码会在前台 js 校验。
服务器⽣成的验证码会在请求头中。
可以获取请求头,并把验证码解析出来。
3、session 不刷新。
有的⽹站验证码验证成功后,直接获取请求资源。
(忘记了刷新 cookie 对应的验证码)可以预先设定⼀个 cookie 和验证码。
利⽤这个漏洞访问⽹站。
对于多线程⽆法控制以及有些⽹站验证码定期不访问失效问题。
可以添加⼀个定时访问程序来解决。
4、利⽤第三⽅插件。
对于有些⽹站验证码⽐较简单。
只含阿拉伯数字和英⽂字母。
可以⽤第三⽅的插件来识别。
例如:tess4j、tesseract 。
5、有些⽹站的验证码是从库中随机取出⼀个来的。
对于这类静态的验证码。
可以⾃⼰建⽴⼀个验证码静态库。
⾃⼰建⽴好图⽚和验证码答案的链接。
采⽤ map 的映射⽅法就可以进⾏识别。
httpClient 带验证码登录实现在实现之前,需要注意一个问题。
关于Cookie,如果能很好跟踪上到Cookie,基本上,实现都是小事一碟。
在网络上,有提到过验证码老是提示有错。
貌似思路流程都是正确的。
兄弟,如果你在半个小时还没搞清楚,先休息一下,听听歌,打打游戏。
再想过。
推断为什么会出现这种问题。
问题是你登录验证码页面(jsp,aspx),实际上就是一个会话或者Cookie记录。
此时,你有去连接登录页面,有可能已经重新生成一个新的验证码啦。
你用了之前的验证码,指定会提示验证码错误。
一、抓取一个网站思路步骤如下:1、首先需要获取验证码页面,把它以图片的格式保证下来。
(图片格式需要通过抓包的工具查看。
如:httpWatch)并跟踪到的cookie保存下来。
cookie必须要跟抓包工具看到的cookie一致。
2、提交登录页面所需要的字段和验证码,字段尽可能全部提交上去。
二、代码实现。
Java代码1import java.io.BufferedReader;2import java.io.File;3import java.io.FileNotFoundException;4import java.io.FileOutputStream;5import java.io.IOException;6import java.io.InputStreamReader;78import mons.httpclient.Cookie;9import mons.httpclient.Header;10import mons.httpclient.HttpClient;11import mons.httpclient.HttpException;12import ValuePair;13import mons.httpclient.cookie.CookiePolicy;14import mons.httpclient.methods.GetMethod;15import mons.httpclient.methods.PostMethod;16import mons.httpclient.params.DefaultHttpParams;1718public class __10086 {1920public void test() throws HttpException, IOException{21String url = "/user/login/verifycode.aspx";22HttpClient httpClient = new HttpClient();23DefaultHttpParams.getDefaultParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);24GetMethod getMethod = newGetMethod("/user/login/verifycode.aspx");25getMethod.setRequestHeader("Host", "");26getMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1");27getMethod.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");28getMethod.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5"); 29getMethod.setRequestHeader("Accept-Charset","GB2312,utf-8;q=0.7,*;q=0.7");30getMethod.setRequestHeader("Connection", "keep-alive");31// getMethod.setRequestHeader("Cookie","Hm_lvt_6e06bb5a029d6c5473951d1079638828=1328777184942;Hm_lvt_e64244e1e591d0337e17a12b714c0996=1328777186856;WT_FPC=id=183.16.35.230-1530895312.30204303:lv=1328174810886:ss=1328174 810886; _SessionId=gj25p555exiqjd45kdcqoq55;BIGipServernxt-wz=369797312.20480.0000;Hm_lpvt_6e06bb5a029d6c5473951d1079638828=1328777184942;Hm_lpvt_e64244e1e591d0337e17a12b714c0996=1328777186856; .12582portals=4 CF97704261E34DBE12913CBA18211005E960282A771D94FF3709BAFC99610A73 97BE8293ADB2E876A0A7380AC4A158016419745F27511D6E79F82A408D009519 D6DDFE18A578E5CFC5F48025C75B33B6EBD43953A7DB05AEBAAB856E0AA29 112818B4910350AADACD2012F5DE56297B1F6622ED7F4959D31E19C474E48F7 773D7966437");32getMethod.setRequestHeader("Cache-Control", "max-age=0");33int code = httpClient.executeMethod(getMethod);34Header header = getMethod.getResponseHeader("Set-cookie");35System.out.println(header.getValue());36String headerCookie = header.getValue();37String SessionId =headerCookie.substring(headerCookie.indexOf("NET_SessionId=") +"NET_SessionId=".length(), headerCookie.indexOf(";"));38System.out.println(SessionId);39String BIGipServernxt =headerCookie.substring(headerCookie.indexOf("BIGipServernxt-wz=") + "BIGipServernxt-wz=".length(), headerCookie.length());40BIGipServernxt = BIGipServernxt.substring(0,BIGipServernxt.indexOf(";"));41StringBuffer sb = new StringBuffer();42sb.append("Hm_lvt_6e06bb5a029d6c5473951d1079638828=1328778307106; ");43sb.append("Hm_lvt_e64244e1e591d0337e17a12b714c0996=1328778308090; ");44sb.append("WT_FPC=id=183.16.35.230-1530895312.30204303:lv=1328174810886: ss=1328174810886; ");45sb.append("_SessionId=").append(SessionId).append("; ");46sb.append("BIGipServernxt-wz=").append(BIGipServernxt).append("; "); 47sb.append("Hm_lpvt_6e06bb5a029d6c5473951d1079638828=1328778307106; "); 48sb.append("Hm_lpvt_e64244e1e591d0337e17a12b714c0996=1328778308090");49System.out.println(sb.toString());50String ValidCode = savegif(getMethod);51getMethod.releaseConnection();52// 第二次链接53httpClient.getHostConfiguration().setHost("", 80, "http"); 54PostMethod method = getPostMethod(ValidCode);55method.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1");56method.setRequestHeader("Host", "");57method.setRequestHeader("Accept", "application/json, text/javascript, */*");58method.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");59// method.setRequestHeader("Accept-Encoding", "gzip, deflate");60method.setRequestHeader("Accept-Charset","GB2312,utf-8;q=0.7,*;q=0.7");61method.setRequestHeader("Connection", "keep-alive");62method.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");63method.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 64method.setRequestHeader("Referer","/user/login/");65method.setRequestHeader("Cookie", sb.toString());66httpClient.executeMethod(method);67System.out.println(method.getStatusCode());68System.out.println(method.getResponseBodyAsString());69// 第三次链接70Header header1 = method.getResponseHeader("Set-cookie");71System.out.println("dd=" + header1.getValue());72sb.append("; " + header1.getValue());73Cookie[] cookies = httpClient.getState().getCookies();74method.releaseConnection();75String my = "/my";76System.out.println(sb.toString());77getMethod = new GetMethod(my);78getMethod.setRequestHeader("Host", "");79getMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1");80getMethod.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");81getMethod.setRequestHeader("Accept-Language", "zh-cn,zh;q=0.5"); 82getMethod.setRequestHeader("Accept-Charset","GB2312,utf-8;q=0.7,*;q=0.7");83getMethod.setRequestHeader("Connection", "keep-alive");84getMethod.setRequestHeader("Referer","/user/login");85getMethod.setRequestHeader("Cookie", sb.toString());86code = httpClient.executeMethod(getMethod);87System.out.println(getMethod.getStatusCode());88System.out.println(getMethod.getResponseBodyAsString()); 89File storeFile = new File("c:/2008sohu.html");90FileOutputStream output = new FileOutputStream(storeFile); 91//得到网络资源的字节数组,并写入文件92output.write(getMethod.getResponseBody());93output.close();94}9596public String savegif(GetMethod getMethod) throws IOException { 97File storeFile = new File("c:/2008sohu.gif");98FileOutputStream output = new FileOutputStream(storeFile); 99//得到网络资源的字节数组,并写入文件100output.write(getMethod.getResponseBody());101output.close();102InputStreamReader is = new InputStreamReader(System.in); 103BufferedReader br = new BufferedReader(is);104String ValidCode = "";105try {106ValidCode = br.readLine();107br.close();108is.close();109} catch(Exception e) {110 e.printStackTrace();111}112return ValidCode;113}114115private PostMethod getPostMethod(String ValidCode) {116PostMethod post = new PostMethod("/ajax/postlogin"); 117NameValuePair[] simcard = {118new NameValuePair("email", "XXX"),119new NameValuePair("password", "XXX"),120new NameValuePair("ValidCode", ValidCode), 121new NameValuePair("rme", "0"),122};123post.setRequestBody(simcard);124return post;125}126127public static void main(String args[]) {128__10086 _10086 = new __10086();129try {130_10086.test();131} catch (HttpException e) {132// TODO Auto-generated catch block 133 e.printStackTrace();134} catch (IOException e) {135// TODO Auto-generated catch block 136 e.printStackTrace();137}138}139}。
web⽹页登录绕过⽤户名,密码,验证码直接登录看了好多关于cookie,tooken,session等理论加实战的⽂章,感觉都是理论,在实际操作中,依然⽆从下⼿,让⼈头⼤,看了这篇⽂章,跟着作者操作,竟然跑通了!!⽂章链接地址为:⽹站,fiddler, python演⽰⼀下:⽹站先登录⼀遍,fiddler抓包,找post请求,⼀般找fiddler的请求时,法⼀:在⽹站的⽬标页⾯的url和fiddler页⾯url⼀致,法⼆:fiddler的inspectors下,看headers,webforms,等有没有你要的信息,如果有,说明这条url是你想要的。
法三:通过fiddler抓包的图⽚或inspectors响应的webview图⽚,来判断你要的url的位置。
python中的代码:导包省略driver = webdriver.Firefox()url = 'xxxx'driver.get(url)driver.add_cookie({'name': '.cnBlogsCookie', 'value': '.cnBlogsCookie的值', 'domain': domain的值''})driver.add_cookie({'name': '.Cnblogs.AspNetCore.Cookies', 'value': '.Cnblogs.AspNetCore.Cookies的值', 'domain': domain的值''})sleep(2)driver.refresh()。
HttpClient配置SSL绕过https证书HttpClient简介请求步骤许多需要后台模拟请求的系统或者框架都⽤的是httpclient,使⽤HttpClient发送请求、接收响应很简单,⼀般需要如下⼏步即可:1. 创建CloseableHttpClient对象。
2. 创建请求⽅法的实例,并指定请求URL。
如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3. 如果需要发送请求参数,可可调⽤setEntity(HttpEntity entity)⽅法来设置请求参数。
setParams⽅法已过时(4.4.1版本)。
4. 调⽤HttpGet、HttpPost对象的setHeader(String name, String value)⽅法设置header信息,或者调⽤setHeaders(Header[] headers)设置⼀组header信息。
5. 调⽤CloseableHttpClient对象的execute(HttpUriRequest request)发送请求,该⽅法返回⼀个CloseableHttpResponse。
6. 调⽤HttpResponse的getEntity()⽅法可获取HttpEntity对象,该对象包装了服务器的响应内容。
程序可通过该对象获取服务器的响应内容;调⽤CloseableHttpResponse的getAllHeaders()、getHeaders(String name)等⽅法可获取服务器的响应头。
7. 释放连接。
⽆论执⾏⽅法是否成功,都必须释放连接先看个官⽅HttpClient通过Http协议发送get请求,请求⽹页内容的例⼦:1.ClientWithResponseHandler.java/*** This software consists of voluntary contributions made by many* individuals on behalf of the Apache Software Foundation. For more* information on the Apache Software Foundation, please see* </>.**/package org.apache.http.examples.client;import java.io.IOException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;/*** This example demonstrates the use of the {@link ResponseHandler} to simplify* the process of processing the HTTP response and releasing associated resources.*/public class ClientWithResponseHandler {public final static void main(String[] args) throws Exception {CloseableHttpClient httpclient = HttpClients.createDefault();try {HttpGet httpget = new HttpGet("/");System.out.println("Executing request " + httpget.getRequestLine());// Create a custom response handlerResponseHandler<String> responseHandler = new ResponseHandler<String>() {@Overridepublic String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {int status = response.getStatusLine().getStatusCode();if (status >= 200 && status < 300) {HttpEntity entity = response.getEntity();return entity != null ? EntityUtils.toString(entity) : null;} else {throw new ClientProtocolException("Unexpected response status: " + status);}}};String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);} finally {httpclient.close();}}}正规途径,我们需要将证书导⼊到密钥库中,现在我们采取另外⼀种⽅式:绕过https证书认证实现访问。
绕过验证码登陆的⽅法(适合只需登陆⼀次可以记住登陆台的⽹站)selenium获取cookies1.⼤前提:先⼿⼯操作浏览器,登录我的博客,并记住密码(保证关掉浏览器后,下次打开浏览器访问我的博客时候是登录状态)2.selenium默认启动浏览器是⼀个空的配置,默认不加载配置缓存⽂件,这⾥先得找到对应浏览器的配置⽂件地址,以⽕狐浏览器为例3.使⽤driver.get_cookies()⽅法获取浏览器的cookies# coding:utf-8import requestsfrom selenium import webdriverfrom bs4 import BeautifulSoupimport reimport time# firefox浏览器配置⽂件地址profile_directory = r'C:\Users\admin\AppData\Roaming\Mozilla\Firefox\Profiles\yn80ouvt.default'# 加载配置profile = webdriver.FirefoxProfile(profile_directory)# 启动浏览器配置driver = webdriver.Firefox(profile)driver.get("https:///u/yoyoketang/followers/")time.sleep(3)cookies = driver.get_cookies() # 获取浏览器cookiesprint(cookies)driver.quit()(注:要是这⾥脚本启动浏览器后,打开的博客页⾯是未登录的,后⾯内容都不⽤看了,先检查配置⽂件是不是写错了)requests添加登录的cookies1.浏览器的cookies获取到后,接下来⽤requests去建⼀个session,在session⾥添加登录成功后的cookiess = requests.session() # 新建session# 添加cookies到CookieJarc = requests.cookies.RequestsCookieJar()for i in cookies:c.set(i["name"], i['value'])s.cookies.update(c) # 更新session⾥cookies计算粉丝数和分页总数1.由于我的粉丝的数据是分页展⽰的,这⾥⼀次只能请求到45个,所以先获取粉丝总数,然后计算出总的页数# 发请求r1 = s.get("https:///u/yoyoketang/relation/followers")参考:。
session的保持是通过cookie来维持的,所以如果用户有勾选X天内免登录,这个session 就X天内一直有效,就是通过这个cookie来维护。
如果没选X天内免登录,基本上就本次才能保持session,下次打开浏览器就要重新登录了。
所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登录直接进入系统。
这次要讲的是,得到用户cookie后,免登录,用HttpClient 保持原来session访问原本一定要登录才能做的事。
HttpClient 4.x 库可以自己处理Cookie
有两咱广度可以添加cookie,
1.通过httpclient.setCookieStore(cookieStore)
2.通过httpGet 或者httpPost 的addHeader(new BasicHeader("Cookie",cookie));
第一种,
HttpClient是否在下次请求中携带从服务器端请求来的Cookie,完全是由设置决定的。
httpclient.getParams.setParameter(ClientPNames.COOKIE_POLICY,
CookiePolicy.BEST_MATCH) 或者CookiePolicy.BROWSER_COMPATIBILITY
如果设置为Cookie策略为BEST_MATCH,或BROWSER_COMPATIBILITY的话,HttpClient会在请求中携带由服务器返回的Cookie。
如果按照上面的写法,手动添加了CookieStore,那么就会在下次请求中夹带着两个Cookie,Cookie和Cookie2。
如果设置为Cookie策略为默认的话,没设置,则需要手动通过
httpclient.setCookieStore(cookieStore); 去设置.
第二种,
通过Header去设置cookie,这种方法,就是今天要用的应用场景,
我们得到一个登录的cookie,免登录访问。
可以用浏览器登录,然后f12通过console 执行document.cookie 得到cookie,
用这个cookie ,在访问时,设置httpGet 或者httpPost 的addHeader(new BasicHeader("Cookie",cookie));就可以免登录访问。
这种场景我用来用第一种方法,设置没成功,可能是因为用第一种时,没设置
path,domain,expire 的原因,我猪的。
这种场景可以解决第一次登录也需要验证码的网站。
没有登录就没办法发布或刷新信息。
如赶集网。
我们直接用get方法访问网站绕过验证码
首先使用http analyzer对你想要访问的网站进行分析
登陆后
你会在header中看到你访问那个网站的时候对网站提交的数据,其中就包含了cookie 等信息
下面在程序中使用的代码:
package http.demo;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import ValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class Dajiewang {
public static void main(String[] args)throws Exception { DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response=null;
System.out.println("******************************页面转向******************************");
String newUrl="/home";
HttpGet get = new HttpGet(newUrl);
get.addHeader(new BasicHeader("Cookie","这里填写你那里面的cookie,直接全部填里面就可以"));
get.addHeader("Content-Type", "text/html;charset=UTF-8");
get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
get.addHeader("Host", "");
get.addHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
get.addHeader("Accept-Language",
"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
HttpResponse httpResponse= client.execute(get);
String responseString
=EntityUtils.toString(httpResponse.getEntity());
//登录后首页的内容
System.out.println(responseString);
get.releaseConnection();
}
}
这样就可以直接访问了,其他的网站只要是需要登陆,或者登陆需要验证码的都需要这样做,但是小心你的账号被封!。