zoukankan      html  css  js  c++  java
  • 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请求头

    技术改变未来
  • 相关阅读:
    sdn&openswitch速查
    此博客已迁移【又要迁回来...】
    设计模式 之 里氏代换原则 (Liskov's Substitution Principle)
    设计模式 之 单一职责原则 (Single Responsibility Principle)
    设计模式 之 接口隔离原则 (Interface Segregation Principle)
    设计模式 之 依赖倒置原则 (Dependency Inversion Principle)
    设计模式 之 开放封闭原则 (Open Close Principle)
    设计模式 之 引言
    git && github
    book-rev8 Chapter 0 Operating system interfaces
  • 原文地址:https://www.cnblogs.com/CodeTracker/p/4735863.html
Copyright © 2011-2022 走看看