python做的http代理比对实际与预期的json值------------(3)
来源:互联网 发布:云锦东方 知乎 编辑:程序博客网 时间:2024/04/30 01:26
#coding=utf-8#作者:ewang#版本:2.7#功能描述:编写python版本,对特定的网站,获取相关的json值import socket import thread import urlparse import selectimport threadingimport reimport json BUFLEN=8192 class Proxy(object): def __init__(self,conn,addr): self.source=conn self.request=""self.Json=""self.Jrespone=""self.headers={} self.destnation=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.run() def get_headers(self): header='' while True: header+=self.source.recv(BUFLEN) index=header.find('\n') if index >0: break firstLine=header[:index] self.request=header[index+1:]self.headers['method'],self.headers['path'],self.headers['protocol']=firstLine.split() def conn_destnation(self): url=urlparse.urlparse(self.headers['path']) hostname=url[1] port="80" if hostname.find(':') >0: addr,port=hostname.split(':') else: addr=hostname port=int(port) ip=socket.gethostbyname(addr) self.destnation.connect((ip,port)) data="%s %s %s\r\n" %(self.headers['method'],self.headers['path'],self.headers['protocol']) self.destnation.send(data+self.request)contentType=re.search(r'{',self.request,re.S)xmlyHost=re.search(r'Host: (.*)\.ximalaya\.(.*)',self.request,re.S)item=re.findall('({.+)',self.request,re.S)item=item[0].replace("\n ","").decode("utf-8")item=re.findall('\"props\"\s*:(.+})\,',item,re.S)item=item[0].replace(" ","")#对json文件编码Jdumps=json.dumps(item,sort_keys=True)#对json文件解码Jrespone=json.loads(Jdumps)json_respone=json.loads(item)if contentType and xmlyHost:self.Json=json_responeself.Jrespone=Jrespone def Compare_Json(self):Json_File="C:\\Users\\ewang\\Desktop\\realJson.json"JHandler=open(Json_File,"rb")try:JsReader=JHandler.readlines()for line in JsReader:ldumps=json.dumps(line,sort_keys=True)lloads=json.loads(ldumps)line_loads=json.loads(line)key_count=0for exp_key in line_loads.keys():for real_key in self.Json.keys():if exp_key==real_key and ((self.Json[real_key]==line_loads[exp_key]) or (line_loads[exp_key]=="" and self.Json[real_key]!=None)):key_count+=1 else:passif key_count==len(line_loads.keys()):print "pass"print u"预期结果:",lloadsprint u"实际结果:",self.Jresponefinally:JHandler.close() def renderto(self): readsocket=[self.destnation] while True: data='' (rlist,wlist,elist)=select.select(readsocket,[],[],3) if rlist: data=rlist[0].recv(BUFLEN) if len(data)>0: self.source.send(data) else: break def run(self): self.get_headers() self.conn_destnation() self.renderto()self.Compare_Json() class Server(object): def __init__(self,host,port): self.host=host self.port=port self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server.bind((host,port)) self.server.listen(5) def start(self):while True: try: conn,addr=self.server.accept()Proxy(conn,addr)except: pass threads=[] for i in range(5):s=Server('127.0.0.1',8889)t=threading.Thread(target=s.start,args=())threads.append(t)if __name__=='__main__':#启动线程 for i in threads: i.start() #keep thread for i in threads: i.join()
0 0
- python做的http代理比对实际与预期的json值------------(3)
- python的http代理,对请求的头文件中的json数据进行比对-------(2)
- python代理脚本实现期望数据与实际数据的比对(V1.0)
- 预期与实际运行结果的对比
- 为何软件开发的实际周期总是比预期的要长两三倍?
- 用python做自动化测试--对服务器端的自动化测试(3)-更多http client实例
- 使用 Python 的 jsonschema 对 json 做验证
- python requests做接口测试对json的处理
- 使用 Python 的 jsonschema 对 json 做验证
- <Python+Openpyxl>用Openpyxl做两个Excel文件的比对
- 怎样做符合用户预期的设计
- 怎样做符合用户预期的设计
- python对json的操作
- Python对Json的操作
- python对json的操作
- python编写http代理获取json数据----------------------(1)
- IOS 设置UINavigationBar的颜色比预期颜色深些
- 探讨Java代理模式与反射机制的实际应用
- iOS开发者皆知的十大Controller
- 单例模式
- C语言进阶-第一周:作业01
- EasyUI 整理
- Unreal中Input的设定
- python做的http代理比对实际与预期的json值------------(3)
- Linux 下安装fcitx中文输入法
- Xcode 快捷键
- openstack 在cpu型号不同, 虚拟机热迁移失败,
- IPC主题二之信号量
- linux查看及修改文件权限以及相关
- Mysql 大数据量高并发的数据库优化
- Activiti工作流的环境配置
- 冒泡排序