美文网首页过程测试开发
Api_处理接口依赖(登录状态)

Api_处理接口依赖(登录状态)

作者: 古佛青灯度流年 | 来源:发表于2016-08-26 09:50 被阅读832次
Paste_Image.png
  • 处理接口依赖

  • 在做接口的过程中,处理接口间的依赖很常见,这里要说的是处理下个接口依赖登录状态的情况:

例:
分析问题:
接口B调用的前提条件是当前用户必须是登录状态,而用户登录是由接口A完成的,所以我们要做的就是在调用接口B之前需要先调用接口A,并且获得用户的登录状态,就我现在公司来说,服务端校验登录状态是根据当前用户的{_identity,PHPSESSID,user_type} 的key和value值决定的,换句话说就是服务端只要找到这3个key的值就认为当前用户处于登录状态,只需要在请求接口的时候在Header中加入这些就可以了。
解决问题:既然知道了,原理就开始吧。

  • 首先要想办法获取调用接口A时,服务端植入的cookie,从而找到{_identity,PHPSESSID,user_type} 的key和value值;

     import urllib, urllib2, cookielib
     #域名
     main_domain =http://www.baidu.com
     #传递参数
     parameter={"r": "A", "phone": "13111111117", "passcode": "1234", "user_type": "100"}
     def getCookie(cls, parameter): 
     u'获取cookie内容'      
         #解析传参
         params = urllib.urlencode(parameter)    
         #拼装get方法的url
         url = main_domain+'/index.php?'+params    
         #调用cookielib函数,获取cookie
         cookie = cookielib.CookieJar()    
         handle = urllib2.HTTPCookieProcessor(cookie)    
         opener = urllib2.build_opener(handle)    
         opener.open(url)        
          print "cookie"+str(cookie)
         #定义一个空字符串d,下边要用到
         d = ""    
         #通过该方法获取cookie中的key、value
         for item in cookie:        
             name = item.name        
             value = item.value 
             #拼装成固定格式 key = value       
             dic = name + "=" + value        
             #拼装字符串
             d = dic+";"+d       
    
          log.debug(u'输出cookie:' + str(d))    
          #生成Header字典
          dic1 = {"Cookie": d}    
          print "dic1="+str(dic1)
    

    输入结果:

    cookie:PHPSESSID=rbeijkuu2e17b3i5j8gj81sim0;user_type=100;_identity=30adfe321230af6cf67c4b55f456c38ec9977a163b1dfeb20b3a928e767f0419a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A21%3A%22%5B488696%2Ctrue%2C2592000%5D%22%3B%7D;
    

    dic1={Cookie:PHPSESSID=rbeijkuu2e17b3i5j8gj81sim0;user_type=100;_identity=30adfe321230af6cf67c4b55f456c38ec9977a163b1dfeb20b3a928e767f0419a%3A2%3A%7Bi%3A0%3Bs%3A9%3A%22_identity%22%3Bi%3A1%3Bs%3A21%3A%22%5B488696%2Ctrue%2C2592000%5D%22%3B%7D;}

  • 注意:在添加Header的时候最好去浏览器中看一下接口Header的格式, 请求格式.png 比如我这里的Request Header格式为:Cookie:key=value;key1=value ,显而易见这是字典的格式,这样看就更明显了{Cookie:key=value;key1=value} 所以我在拿到cookie的value的以后,又将他们组装成为指定格式的字典,这点很重要!(我在这掉坑里面了)
  • 接下来就是将Header中加入指定k和v

      parameter = {"r": "B", "demand_id": '2938'}
     def getInterface( parameter=None, headers={}):   
      u'''    parameter = {"r": "demand/info", "demand_id": '2938'}格式    '''    
        #获取请求url     
        get_url = main_domain+'/index.php?'   
       #解析请求参数    
       params = urllib.urlencode(parameter)     
       send_url = get_url + params    
       #访问接口    
       req = urllib2.Request(send_url, headers=headers)    
       #打印请求日志:    
       httpHandler = urllib2.HTTPHandler(debuglevel=1)    
       httpsHandler = urllib2.HTTPSHandler(debuglevel=1)    
       opener = urllib2.build_opener(httpHandler, httpsHandler)    
       urllib2.install_opener(opener)    
       #读取返回值    
       response = urllib2.urlopen(req).read()    
       #以json格式读取    
       jresult = json.loads(response)    
       print response    
       print  jresult
    

调用:
getInterface(parameter=parameter,headers=dic1)

  • 完成

@晴天-2016-08-30 20:59:46 (后补)

相关文章

网友评论

    本文标题:Api_处理接口依赖(登录状态)

    本文链接:https://www.haomeiwen.com/subject/fmoasttx.html