Python请求自动处理cookie

  在平时测试当中经常会遇到使用python脚本来模拟http请求的操作,在做一次接口【http请求,返回json】测试时,开发提供的http接口在请求时,会被filter拦截,验证请求者的session是否合法,由于我们是直接请求,没有附带任何的cookie与headers,那如何让我们合法的进行接口的请求,并继续测试呢?详见下面描述:

  在使用系统之前,我们都会经过一个登录的操作,这个登录操作就会把我们的sessionId的状态属性设置为合法【不同的系统,细节不同,大体都类似】,我们要是想直接请求接口,并需带上一个合法的sessionId在我们的cookie中,如何去做呢?

  有以下几种方法:

  1、人工准备一条合法的sessionId,在请求时放入到cookie中。缺点:需要人工准备,而且sessionId还会过期。

  2、模拟登录请求,在响应头部里set cookie中将sessionId扣出来,下次请求时带上。缺点:需要在响应头部中处理set cookie部分内容,若有大量的set cookie时,处理起来比较麻烦。

  3、使用CookieJar,模拟登录请求,接着模拟接口请求。优点:简单方便。

  

  第一种方法:这里不介绍,也不推荐。

  第二种方法:可以参考http请求时添加请求头。

  第三种方法:详见以下描述。

  现有接口QueryVideoList:http://192.168.1.242:9000/QueryVideoList

  QueryVideoList请求参数:{‘catalogsID‘:‘‘,‘catagoryCode‘:‘‘,‘sortType‘:‘desc‘,‘sortField‘:‘Time‘,‘videoInfo‘:‘‘,‘beginTime‘:‘‘ ,‘endTime‘:‘‘ ,‘pageSize‘:‘20‘,‘pageIndex‘:‘1‘}

  登陆时post的url:http://192.168.1.242:9000/    

  这个啥意思呢?你可以通过http请求监控工具,监控下登录的过程可以看到。推荐fiddler,登陆时会post用户名与密码,这个post的url就是登录的url,这个post操作主要就是将你的sessionId设为合法。

  接下来我来直接上代码吧:

 1 #coding:u8
 2 import urllib
 3 import urllib2
 4 import cookielib
 5
 6 cookieJar=cookielib.CookieJar()
 7 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
 8
 9 login_post_url = "http://192.168.86.242:9000/"
10 query_video_list_post_url = "http://192.168.1.242:9000/QueryVideoList"
11
12 login_post_data = {‘username‘:‘feixu‘,‘password‘:‘000000‘,‘SysType‘:‘1‘}
13 query_video_list_post_data = {‘catalogsID‘:‘‘,‘catagoryCode‘:‘‘,‘sortType‘:‘desc‘,‘sortField‘:‘Time‘,‘videoInfo‘:‘‘,‘beginTime‘:‘‘ ,‘endTime‘:‘‘ ,‘pageSize‘:‘20‘,‘pageIndex‘:‘1‘}
14
15 #urlencode编码
16 def encode_post_data(post_data):
17     return urllib.urlencode(post_data)
18
19 #post请求通用方法,使用全局变量opener,具体cookie收集功能
20 def post_fun(url,post_data):
21     global opener
22     req=urllib2.Request(url,encode_post_data(post_data))
23     return opener.open(req)
24
25 #查询视频列表接口
26 def query_video_list(url,post_data):
27     return post_fun(url,post_data)
28
29 #登录,使cookie中指定的session变为合法
30 def login(url,post_data):
31     return post_fun(url,post_data)
32
33 login(login_post_url,login_post_data)
34 resp = query_video_list(query_video_list_post_url,query_video_list_post_data)
35 print resp.read()

  首先我们创建了一个cookieJar,然后使用这个cookieJar构建了一个opener,也就是说,后期使用opener来进行请求时,会自动将cookie存入到cookieJar容器中,再继续请求时,会附带上一次存入的cookie,因此我们只需要使用opener来进行请求就行了,cookie的事,由cookieJar自动帮我们处理。

  你需要处理的就是请求的url、请求的数据,除了cookie之外的headers请求头

时间: 2024-10-09 10:48:21

Python请求自动处理cookie的相关文章

[zz]【整理】Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie

http://www.crifan.com/python_auto_handle_cookie_and_save_to_from_cookie_file/ #!/usr/bin/python # -*- coding: utf-8 -*- """ Function: [整理]Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie http://www.crifan.com/python_auto_handle_cookie_an

python selenium-webdriver 通过cookie登陆(十一)

上节介绍了浏览器的常用方法,涉及到了cookie的使用,本节介绍一下如何利用cookie进行登陆系统,这里使用到了request模块,我们首先利用request模块,请求登陆地址进行登陆,登陆成功以后获取cookie值,然后再通过add_cookie添加到浏览器,使系统处于登陆状态.这里需要注意的是request请求返回的cookie的格式不能直接传入add_cookie方法,所以这里需要进行转换. #这里需要注意区别,按住格式进行转换 #request 请求返回cookie的格式 {'PHPS

vue resource 携带cookie请求 vue cookie 跨域(六)

1.依赖VueResource  确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm install vue-resource --save 在主方法添加 过滤 Vue.http.interceptors.push(function(request, next) {//拦截器 // 跨域携带cookie request.credentials = true; next() }) 以下是针对每个请求都会携带cookie ,也可以指定接口请求携带cookie this.$

Loadrunner在post请求的cookie中插入其它多个值

有一个商城,提交订单的时候,需要在post请求的cookie中set一个code码,便于防刷 1 tijiao() 2 { 3 4 lr_think_time(1); 5 6 web_reg_save_param("validcode", 7 "LB=validcode=", 8 "RB=;", 9 "Search=All", 10 LAST); 11 12 13 14 web_submit_data("toSubm

iOS-WKWebView携带cookie发送http请求,cookie失效

发送请求代码: NSString *testUrl = @"http://10.22.122.7:8081/test2_action/view_index"; NSURL *url = [NSURL URLWithString:testUrl]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy tim

vue resource 携带cookie请求 vue cookie 跨域

vue resource 携带cookie请求 vue cookie 跨域 1.依赖VueResource 确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm install vue-resource --save 在主方法添加 过滤 Vue.http.interceptors.push(function(request, next) {//拦截器 // 跨域携带cookie request.credentials = true; next() }) 以下是针对每个请

python requests 的cookie 操作

结论: 1.requests模块的请求和响应分别有cookie对象. 可以通过此对象设置和获取cookie. 2.通过在requests.get,requests.post等方法请求中传入cookies字典参数 只用于单次请求的cookie设置. 3. request.session() 返回保持会话的对象.Provides cookie persistence, connection-pooling, and configuration. 1. 请求的cookie设置和获取 方式一: 参数传入

python中对cookie进行添加、更新和删除

进行接口请求时,如果第3个接口请求用到了第1次请求和第2次请求的cookie值,需要把两次的cookie合并 https://blog.csdn.net/titiyufeng/article/details/53182951?locationNum=5&fps=1 原文地址:https://www.cnblogs.com/come202011/p/12129125.html

python通过生成cookie文件,并通过cookie文件请求网站

今天有个需求需要通过cookie访问内部cmdb,获取机器等信息.上网搜罗了一下用法.记录一下 带密码直接访问的 # -*- coding: utf-8 -*- # !/usr/bin/python import urllib2 import urllib import cookielib import re auth_url = 'http://a.test.com/user/login' home_url = 'http://a.test.com/cmdb/hosts/'; # 登陆用户名和