socket python json_python编写http代理获取json数据----------------------(1)

#coding=utf-8

import socket

import thread

import urlparse

import select

import threading

import re

import json

BUFLEN=8192

class Proxy(object):

def __init__(self,conn,addr):

self.source=conn

self.request=""

self.Json=""

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,self.request=header.split('\r\n',1)

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)

#print ip,port

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)

#filename=re.findall('"serviceId" : "(\w+)"',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文件编码

json_dumps=json.dumps(item,sort_keys=True)

#对json文件解码

json_respone=json.loads(json_dumps)

if contentType and xmlyHost:

print self.request

#print item

#print json_dumps

print json_respone

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()

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

s=Server('127.0.0.1',8889)

threads=[]

for i in range(1):

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值