cookielib和urllib2模块相结合模拟网站登录

news/2024/5/9 7:26:11/文章来源:https://blog.csdn.net/weixin_30435261/article/details/95696497
cookielib和urllib2模块相结合模拟网站登录

1.cookielib模块

cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。例如可以利用 本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。coiokielib模块用到的对象主要有下面几 个:CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。其中他们的关系如下:

 

2.urllib2模块

说到urllib2模块最强大的部分绝对是它的opener,

urllib2模块的 OpenerDirector 操作类。这是一个管理很多处理类(Handler)的类。而所有这些 Handler 类都对应处理相应的协议,或者特殊功能。分别有下面的处理类:

  • BaseHandler
  • HTTPErrorProcessor
  • HTTPDefaultErrorHandler
  • HTTPRedirectHandler
  • ProxyHandler
  • AbstractBasicAuthHandler
  • HTTPBasicAuthHandler
  • ProxyBasicAuthHandler
  • AbstractDigestAuthHandler
  • ProxyDigestAuthHandler
  • AbstractHTTPHandler
  • HTTPHandler
  • HTTPCookieProcessor
  • UnknownHandler
  • FileHandler
  • FTPHandler
  • CacheFTPHandler

cookielib模块一般与urllib2模块配合使用,主要用在urllib2.build_oper()函数中作为urllib2.HTTPCookieProcessor()的参数。

由此可以使用python模拟网站登录。

先写个获取CookieJar实例的demo:

复制代码
 1 #!/usr/bin/env python  2 #-*-coding:utf-8-*-   4 import urllib  5 import urllib2  6 import cookielib  7  8 #获取Cookiejar对象(存在本机的cookie消息)  9 cookie = cookielib.CookieJar()  10 #自定义opener,并将opener跟CookieJar对象绑定 11 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 12 #安装opener,此后调用urlopen()时都会使用安装过的opener对象  13 urllib2.install_opener(opener)  14  15 url = "http://www.baidu.com"  16 urllib2.urlopen(url)
复制代码

 

然后写个用POST方法来访问网站的方式(用urllib2模拟一起post过程):

复制代码
1 #! /usr/bin/env python  2 #coding=utf-8  3  4 import urllib2  5 import urllib  6 import cookielib  7  8 def login():  9 email = raw_input("请输入用户名:")  10 pwd = raw_input("请输入密码:")  11 data={"email":email,"password":pwd} #登陆用户名和密码 12 post_data=urllib.urlencode(data) #将post消息化成可以让服务器编码的方式  13 cj=cookielib.CookieJar() #获取cookiejar实例 14 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  15 #自己设置User-Agent(可用于伪造获取,防止某些网站防ip注入)  16 headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}  17 website = raw_input('请输入网址:') 18 req=urllib2.Request(website,post_data,headers)  19 content=opener.open(req)  20 print content.read() #linux下没有gbk编码,只有utf-8编码  21  22 if __name__ == '__main__': 23 login()
复制代码

 

注意这个例子经过测试,发现只有人人网和开心网之类的网站可以,而像支付宝,百度网盘,甚至是我们学校的教务系统都不能成功登录,就会显示如下的报错消息:

复制代码
Traceback (most recent call last):File "login.py", line 23, in <module> login() File "login.py", line 19, in login content=opener.open(req) File "/usr/lib/python2.7/urllib2.py", line 406, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 519, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 444, in error return self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 405: Method Not Allowed
复制代码

可能是这些网站在编写时不接受客户端请求该方法,具体原因我也不知道为什么。而且这个程序不能自动通过有验证码验证的网站,所以纯粹学习它的原理吧。

然后放一下用python模拟登录的几个示例(转自:http://www.nowamagic.net/academy/detail/1302882

复制代码
# -*- coding: utf-8 -*- # !/usr/bin/python import urllib2 import urllib import cookielib import re auth_url = 'http://www.nowamagic.net/' home_url = 'http://www.nowamagic.net/';  # 登陆用户名和密码 data={ "username":"nowamagic", "password":"pass" } # urllib进行编码  post_data=urllib.urlencode(data)  # 发送头信息 headers ={ "Host":"www.nowamagic.net", "Referer": "http://www.nowamagic.net" }  # 初始化一个CookieJar来处理Cookie cookieJar=cookielib.CookieJar() # 实例化一个全局opener  opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) # 获取cookie req=urllib2.Request(auth_url,post_data,headers) result = opener.open(req)  # 访问主页 自动带着cookie信息  result = opener.open(home_url)  # 显示结果 print result.read()
复制代码

1. 使用已有的cookie访问网站

复制代码
import cookielib, urllib2ckjar = cookielib.MozillaCookieJar(os.path.join('C:\Documents and Settings\tom\Application Data\Mozilla\Firefox\Profiles\h5m61j1i.default', 'cookies.txt')) req = urllib2.Request(url, postdata, header) req.add_header('User-Agent', \ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) ) f = opener.open(req) htm = f.read() f.close()
复制代码

2. 访问网站获得cookie,并把获得的cookie保存在cookie文件中

复制代码
import cookielib, urllib2req = urllib2.Request(url, postdata, header) 
req.add_header('User-Agent', \ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') ckjar = cookielib.MozillaCookieJar(filename) ckproc = urllib2.HTTPCookieProcessor(ckjar) opener = urllib2.build_opener(ckproc) f = opener.open(req) htm = f.read() f.close() ckjar.save(ignore_discard=True, ignore_expires=True)
复制代码

3. 使用指定的参数生成cookie,并用这个cookie访问网站

复制代码
import cookielib, urllib2cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
values = {'redirect':", 'email':'abc@abc.com', 'password':'password', 'rememberme':", 'submit':'OK, Let Me In!'} data = urllib.urlencode(values) request = urllib2.Request(url, data) url = urlOpener.open(request) print url.info() page = url.read() request = urllib2.Request(url) url = urlOpener.open(request) page = url.read() print page
复制代码

另外,补充一下urllib2的方法:

1.geturl():

这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。获取的URL或许跟请求URL不同。

URL重定向 (URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网站网址,转成 较短的网址。因为当要传播某网站的网址时,常常因为网址太长,不好记忆;又有可能因为换了网路的免费网页空间,网址又必须要变更,不知情的使用者还以为网 站关闭了。这时就可以用网路上的转址服务了。这个技术使一个网页是可借由不同的统一资源定位符(URL)连结。

 

>>> import urllib2 >>> url = "http://www.baidu.com" >>> req = urllib2.Request(url) >>> response = urllib2.urlopen(req) >>> response.geturl() 'http://www.baidu.com' >>> print response.info() Date: Fri, 28 Mar 2014 03:30:01 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: Close Vary: Accept-Encoding Set-Cookie: BAIDUID=AF7C001FCA87716A52B353C500FC45DB:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BDSVRTM=0; path=/ Set-Cookie: H_PS_PSSID=1466_5225_5288_5723_4261_4759_5659; path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM " Expires: Fri, 28 Mar 2014 03:29:06 GMT Cache-Control: private Server: BWS/1.1 BDPAGETYPE: 1 BDQID: 0xea1372bf0001780d BDUSERID: 0

 

我们可以通过urllib2 默认情况下会针对 HTTP 3XX 返回码自动进行 redirect 动作(URL重定向),无需人工配置。要检测是否发生了 redirect 动作,只要检查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。

 


import urllib2
my_url = 'http://www.google.cn' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirected my_url = 'http://rrurl.cn/b1UZuP' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirected

 

Debug Log

使用 urllib2 时,可以通过下面的方法把 debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试,有时可以省去抓包的工作


import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.google.com')

 

基本cookielib和urllib2结合就这些内容,请多多指教!

posted on 2016-12-17 17:12 Kilichko 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Yemilice/p/6192682.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_733804.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android wap网站自动适应

做个整理。 研究了一下新浪的wap网站&#xff0c;发现原来我们的head存在着这样的差异……<%page contentType"text/html;charsetUTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"><h…

如何打造一个安全满分网站

继上一篇《如何打造一个全满分网站》之后&#xff0c;这一次我们来谈谈如何打造一个在安全方面也能打满分的网站。因为对于一个网站来讲&#xff0c;仅有功能是不够的&#xff0c;还需要考虑性能&#xff0c;仅有性能也不够&#xff0c;还需要考虑安全。 由于网站安全方面涉及因…

干货|NLP、知识图谱教程、书籍、网站、工具……(附资源链接)

from&#xff1a;https://baijiahao.baidu.com/s?id1608257842684702878&wfrspider&forpc 来源&#xff1a;人工智能头条 本文多资源&#xff0c;建议阅读收藏。 本文整理了关于 NLP 与知识图谱的众多参考资源&#xff0c;涵盖内容与形式非常丰富。 [ 导读 ]本文作…

十年建站老司机带你十分钟搭建网站

本文概要&#xff1a; 1. 域名 域名注册 域名备案 域名解析绑定 2. 服务器 虚拟主机 windows服务器 linux服务器 3. CMS建站系统 4. 总结 在如今互联网发展迅速猛进的大环境下&#xff0c;网站已经成为一个企业不可缺少的网络媒介。但网站开发行业鱼龙混杂&a…

windows Server 2008 R2 IE增强安全配置正在阻止来自下列网站的内容

1、在windows Server 2008 R2上访问百度&#xff0c;会出现以下界面 当在Windows Sever 2008 R2中运动IE8的时候会发现默认情况下IE启用了增强的安全配置&#xff0c;为了方便而且是在内网的情况下我们可以关闭IE8的增强安全配置&#xff0c;操作很简单如下步骤。 2、进行关闭安…

为什么说企业的发展离不开网站建设?

现在是互联网科技时代&#xff0c;企业要发展好多都离不开网络推广&#xff0c;那网络推广自然就离不开网站建设。那么&#xff0c;下面就“为什么说企业的发展更离不开网站建设呢&#xff1f;”话题进行详细分析&#xff1a; 1.展示产品信息 企业网站是为了推广一个平台&…

svn服务器会用到哪些端口_SEO学习笔记(二):如何拓展网站关键词呢?拓展关键词会用到哪些工具呢?...

写这篇文章之前&#xff0c;我问自己&#xff1a;“为什么要做网站呢&#xff1f;为什么要做SEO呢&#xff1f;”&#xff0c;思考了半天&#xff01;我认为&#xff0c;我们做网站优化无非就是想要把网站关键词做上首页,尽量的扩大网站的曝光度,以及覆盖度。可是要获得高流量&…

JSP网站开发基础总结《八》

JSP的学习总结到本篇已经八篇了&#xff0c;内容比较多&#xff0c;但都是实战&#xff0c;本篇最后为大家介绍一个小效果&#xff1a;百度分页。就是当我们遍历的数据对象较多时&#xff0c;这时我们就会看到了这个效果了&#xff0c;那他是如何实现的呢&#xff1f;下面我们就…

淘宝、天猫、腾讯网站系统架构

淘宝、天猫、腾讯网站系统架构 (2016-06-02 17:19:12)前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0c;在这个…

robots.txt SEO 与搜索引擎

懂一点SEO的人都知道&#xff0c;在SEO网站优化中robots.txt文件的编写直接影响网站优化的成果。正所谓&#xff0c;细节决定成败&#xff0c;robots.txt文件要怎么写&#xff1f;今天小刚seo就花一点时间&#xff0c;专门为大家献上史上最详细的robots文件的写法解析。 一、为…

视频网站中video标签中的视频资源以blob:http呈现的探索

一、问题场景 想下载知乎视频资源&#xff0c;却发现视频链接是这个样子的 blob:https://v.vzuu.com/b6146956-6e52-406d-8909-f3f1b81ae461 当时一脸懵比啊 ~难道blob:https是什么牛逼的新协议&#xff1f;于是进行了一番探索 二、探寻结论 结论就是blob:https并不是一种协议…

Java集群--大型网站是怎样解决多用户高并发访问的

Java集群--大型网站是怎样解决多用户高并发访问的时间过得真快&#xff0c;再次登录博客园来写博&#xff0c;才发现距离上次的写博时间已经过去了一个月了&#xff0c;虽然是因为自己找了实习&#xff0c;但这也说明自己对时间的掌控能力还是没那么的强&#xff0c;哈哈&#…

LAMP架构部署和动态网站环境的配置

实验环境&#xff1a;操作系统&#xff1a;centos 7.5服务器IP&#xff1a;192.168.10.5运行用户&#xff1a;root连接工具&#xff1a;xshell工具web环境&#xff1a;Linuxapachephpmariadb&#xff08;LAMP架构&#xff09; 大型动态应用系统平台主要是针对于大流量、高并发网…

web前端开发项目资源网站,私家珍藏!

1.CodePen&#xff1a; http://codepen.io/ 网站里有很多很酷的特效&#xff0c;而且可以看到效果的源代码&#xff0c;也可以看到实现效果&#xff0c;是一个非常不错的前端开发学习资源网站。 这个是CodePen网站里的一个效果的源码截图&#xff0c;是不是很酷呀&#xff01; …

前端学习网站

gotoandlearn.com 一个很棒的视频教程网站 CodePlayer: http://thecodeplayer.com/ 它的优点是 你可以看到作者是怎样一个个字母把代码打出来的… Codepen: http://codepen.io/ 这里面有很多很酷的特效&#xff0c;而且你还能看到它们的源代码. CSSdeck: http://cssdeck.com…

认识动态网站

之前做项目&#xff0c;做的前端。第一个项目的时候蠢的来(థ౪థ)σ根本不明白前后端有什么联系&#xff0c;所以正好跟着这波纳新的同学学一下后端&#xff01;ヾ(◍∇◍)&#xff89;&#xff9e; 主要区分动态网站和静态网站&#xff1a; 动态网站用PHP开发&#xff…

网站SEO优化

1、SEO&#xff08;Search Enginner Optinazition&#xff09;与 SEM&#xff08;Search Enginner Market&#xff09; SEM比如&#xff1a;百度浏览器搜东西出来的前几个广告&#xff0c;是花钱的 而SEO是为了提高网站排名但是不花钱 2、权重&#xff1a; 权重越大&#x…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

利用dns解析来实现网站的负载均衡

当网站的访问量大了就会考虑负载均衡&#xff0c;这也是每一个架构师的基本功了&#xff0c;其基本地位就相当于相声里的说学逗唱&#xff0c;活好不好就看这个了 :) 传统的负载均衡思路是单点的&#xff0c;不管你是硬件的还是软件的基本都是这样的原理 对于一般的需求来说&a…

谷歌搜关键字找网站漏洞合集

天前谷歌地址 https://g.alexyang.me/到GoogLe,搜索一些关键字,edit.asp?韩国肉鸡为多,多数为MSSQL数据库!2,到Google,site:cq.cninurl:asp3,利用挖掘鸡和一个ASP木马.文件名是login.asp路径组是/manage/关键词是went.asp用oror来登陆4,这个应该N多人都搞过吧。。关键字&#…