使用cookie登录

前言:什么是cookie?Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的。一、Urllib库简介Urllib是python内置的H…

大家好,又见面了,我是你们的朋友全栈君。

前言:

什么是cookie?

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的。


一、Urllib库简介

Urllib是python内置的HTTP请求库,官方地址:https://docs.python.org/3/library/urllib.html

包括以下模块:

复制代码

>>>urllib.request 请求模块

>>>urllib.error 异常处理模块

>>>urllib.parse url解析模块

>>>urllib.robotparser robots.txt解析模块

复制代码

 


二、urllib.request.urlopen介绍

uurlopen一般常用的有三个参数,它的参数如下:

urllib.requeset.urlopen(url,data,timeout)

简单的例子:

1、url参数的使用(请求的URL)

response = urllib.request.urlopen('http://www.baidu.com')

2、data参数的使用(以post请求方式请求)

data= bytes(urllib.parse.urlencode({'word':'hello'}), encoding='utf8')

response= urllib.request.urlopen('http://www.baidu.com/post', data=data)

3、timeout参数的使用(请求设置一个超时时间,而不是让程序一直在等待结果)

response= urllib.request.urlopen('http://www.baidu.com/get', timeout=4)

 


三、构造Requset

1、数据传送POST和GET(举例说明:此处列举登录的请求,定义一个字典为values,参数为:email和password,然后利用urllib.parse.urlencode方法将字典编码,命名为data,构建request时传入两个参数:url、data。运行程序,即可实现登陆。)

GET方式:直接以链接形式访问,链接中包含了所有的参数。

复制代码

LOGIN_URL= "http://*******.kiwisns.com/postLogin/"

values={'email':'*******@user.com','password':'123456'}

data=urllib.parse.urlencode(values).encode()

geturl = LOGIN_URL+ "?"+data

request = urllib.request.Request(geturl)

复制代码

 

POST方式:上面说的data参数就是用在这里的,我们传送的数据就是这个参数data。

复制代码

LOGIN_URL='http://*******.kiwisns.com/postLogin/'

values={'email':'*******@user.com','password':'123456'}

data=urllib.parse.urlencode(values).encode()

request=urllib.request.Request(URL,data)

复制代码

 

2、设置Headers(有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性)

使用cookie登录

 

上图可以看到该请求的headers,这个头中包含了许多信息:Cache、Client、Transport等等。其中,agent就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以可以在headers中设置agent。

举例:(这个例子只是说明了怎样设置headers)

user_agent = r'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'

headers={'User-Agent':user_agent,'Connection':'keep-alive'}

request=urllib.request.Request(URL,data,headers)

 


四、使用cookie登录

1、获取登录网址

浏览器输入需要登录的网址:’http://******.kiwisns.com/login’(注意:这个并非其真实站点登录网址),使用抓包工具fiddler抓包(其他工具也可)找到登录后看到的request。

此处确定需要登录的网址为:’http://******.kiwisns.com/postLogin/’

使用cookie登录

 

2、查看要传送的post数据

找到登录后的request中有webforms的信息,会列出登录要用的post数据,包括Email,password,auth。

使用cookie登录

 

3、查看headers信息

找到登录后看到的request的headers信息,找出User-Agent设置、connection设置等

使用cookie登录

 

4、开始编码,使用cookie登录该网站

复制代码

import urllib.error, urllib.request, urllib.parse
import http.cookiejar

LOGIN_URL = 'http://******.kiwisns.com/postLogin'
#get_url为使用cookie所登陆的网址,该网址必须先登录才可
get_url = 'https://******.kiwisns.com/admin/affiliate/pending'
values = {'email':'******@user.com','password':'123456','auth':'admin'}
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36' \
             r' (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'
headers = {'User-Agent':user_agent, 'Connection':'keep-alive'}
#将cookie保存在本地,并命名为cookie.txt
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
except urllib.error.URLError as e:
    print(e.reason)

cookie_aff.save(ignore_discard=True, ignore_expires=True)

for item in cookie_aff:
    print('Name ='+ item.name)
    print('Value ='+ item.value)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url,headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())

复制代码

 

5、反复使用cookie登录

(上面代码中我们保存cookie到本地了,以下代码我们能够直接从文件导入cookie进行登录,不用再构建request了)

复制代码

import urllib.request, urllib.parse
import http.cookiejar

get_url = 'https://******.kiwisns.com/admin/affiliate/pending'
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
cookie_aff.load(cookie_filename,ignore_discard=True,ignore_expires=True)

handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url)
get_response = opener.open(get_request)
print(get_response.read().decode())

复制代码

 


 

以上

作者:搁浅 
出处: http://www.cnblogs.com/xiaoxi-3-/ 
如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126389.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • n皇后问题c语言代码_c语言序列求和输入两个正整数m和n

    n皇后问题c语言代码_c语言序列求和输入两个正整数m和nn皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。(即任意两个皇后都不能处于同一行、同一列或同一斜线上).上图为8皇后问题的一种解法。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中’Q’和’.’分别代表了皇后和空位。示例:输入:4输出:[…

    2022年9月29日
    0
  • Activity与Activity间隔activity跳转之Intent.FLAG_ACTIVITY_CLEAR_TOP用法「建议收藏」

    Activity与Activity间隔activity跳转之Intent.FLAG_ACTIVITY_CLEAR_TOP用法「建议收藏」1.如果已经启动了四个Activity:A,B,C和D。在DActivity里,我们要跳到BActivity,同时希望Cfinish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示:Intent intent = new Intent(this, B.class);    intent.setFlags(Intent.FLAG_ACTI…

    2022年7月17日
    13
  • CryptoJS简单使用

    CryptoJS简单使用转自CryptoJS简单使用CryptoJS简单使用.简单看下几种加密和哈希函数.

    2022年10月26日
    0
  • java socket 实现原理_java socket原理

    java socket 实现原理_java socket原理TCP/IP模型中有5层结构:应用层、传输层、网络层、数据链路层以及物理层。其中IP协议是位于网络层的,TCP协议是位于传输层的,通过IP协议可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同的操作系统的网络,IP协议只能保证计算机能够接收和发送分组数据,当计算机要和远程的计算机建立连接时,TCP协议会让它们建立连接:用于发送和接收数据的虚拟电路。在Java中…

    2022年7月7日
    15
  • java 流程引擎_Activiti流程引擎对象及配置原理解析「建议收藏」

    java 流程引擎_Activiti流程引擎对象及配置原理解析「建议收藏」流程引擎对象和其配置对象都是activiti的核心对象一、activiti的简单使用流程activiti在工作时,一般有以下几个步骤:创建一个流程引擎配置对象ProcessEngineConfiguration对流程引擎进行配置通过流程引擎配置对象来获取流程引擎对象ProcessEngine通过流程引擎对象来部署流程图启动流程二、流程引擎配置对象ProcessEngineConfiguration…

    2022年10月20日
    0
  • Java服务器接收上传的文件

    Java服务器接收上传的文件有时候我们服务器需要接收来自用户上传过来的文件,这时候就需要服务器端有相应的服务能够接收这个文件下面写一个简单的服务器端代码,需要的朋友可以参考一下注释很全就不多啰嗦了packagecom.SM_test.saomiao.constroller;importjava.io.File;importjava.io.FileOutputStream;importjav

    2022年5月29日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号