Python针对特定服务定制的代理工具V2.0------(proxyHandler.py)(python搭建代理服务器)

网友投稿 271 2022-08-29


Python针对特定服务定制的代理工具V2.0------(proxyHandler.py)(python搭建代理服务器)

proxyHandler.py文件的功能在上个章节简述过,下面给出参考源代码:

#coding=utf8from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServerimport socketimport urllibfrom zipdeal import GzipClassclass proxyHandler(BaseHTTPRequestHandler): def do_POST(self): try: #服务响应的链接uri uri = self.path #根据协议把url分成两部分,一部分是协议,例如 #另一部分是服务和接口 #把另一部分内容放入到: hostAndInterface hostAndInterface = urllib.splittype(uri)[-1] #根据服务器拆分成两个部分,一部分是服务器 #另一部分是接口:/api/v1/statistics host, interface = urllib.splithost(hostAndInterface) #根据/拆分成几个部分,获取最后一个元素的值,例如:statistics lastOfInterface=interface.split("/")[-1] #判断接口最后一个字符是否是:statistics,如果是则执行if之后的语句 if lastOfInterface=='statistics': #根据端口号拆分成两个部分:host、port host, port = urllib.splitnport(host) #如果端口号小于80,把端口号设置为80 if port < 0: port = 80 #把服务域名转换为服务IP host_ip = socket.gethostbyname(host) #从headers中删除headers['Proxy-Connection']的引用 # 然后把headers['Connection']设置为'keep-alive' del self.headers['Proxy-Connection'] self.headers['Connection'] = 'keep-alive' #请求的第一行,把该行数据赋值给send_data变量 #requestline的格式如:POST HTTP/1.1 send_data = self.requestline #重新创建个head用来保存新的heads值 head = '' for key, val in self.headers.items(): head = head + "%s: %s\r\n" % (key, val) #给请求的数据加上head和请求参数 send_data = send_data + head+'\r\n' #创建一个客户端套接字链接 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #客户端发送连接请求 client.connect((host_ip, port)) #客户端发送请求数据 client.sendall(send_data) #保存服务端返回的字段 data = '' while True: #把客户端从服务中接收的数据保存到一个临时变量tmp中 tmp = client.recv(8192) #判断接收的数据是否为空,如果为空跳出循环 if not tmp: break #不为空,把tmp中的数据传递给data data = data + tmp #断开链接 client.close() #把接收到的数据data写入到文件wfile中 self.wfile.write(data) #self.rfile存放的是请求数据而且数据还被gzip #通过print打印到屏幕的都是乱码 GzipClass().GZFile(self.rfile.read()) except Exception,e: print e def do_CONNECT(self): pass def do_GET(self): pass def test(): host='192.168.xx.xx' port=8888 try: server = HTTPServer((host, port), proxyHandler) print 'Welcome to the Server HTTP On %s Port %d...' %(host,port) server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down server' server.socket.close()if __name__ == '__main__': test()

操作比较简单,基于BaseHTTPServer、socket、urllib实现对/api/v1/statistics接口数据进行抓取。每行都附有注释。如果有不理解可以私信我,改版本比较简介,后期会跟进优化代码


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python针对特定服务定制的代理工具V2.0----------------(代码组织简介)(python 全局代理)
下一篇:Java设计模式七大原则之里氏替换原则详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~