1.文件分割传输测试网速
固定的数据
#!/usr/bin/env python
#coding=utf8
 
import httplib
import time
import urllib
httpClient = None
def httpGet(url, data):
    try:
        start_time = time.time() * 1000
        httpClient = httplib.HTTPConnection(url, 80, timeout=30)
        httpClient.request('GET', data)
        end_time = time.time() * 1000
        spend_time =  end_time - start_time
        print 'Upload:'+str(len(data) / (spend_time / 1000))+ 'Byte/s'
        
        
        start_time = time.time() * 1000
        response = httpClient.getresponse()
        #print response.status
        #print response.reason
        mdata = response.read()
        #print mdata
        end_time = time.time() * 1000
        spend_time =  end_time - start_time
        print 'Download:'+str(len(mdata) / (spend_time / 1000))+ 'Byte/s'
    except Exception, e:
        print e
        
def httpPost(url, data):
    try:
        params = urllib.urlencode(data)
        #headers = {"Content-type": "application/x-www-form-urlencoded", #"Accept":"text/plain"}
        
        headers = {'Content-Type': 'application/json'}
        start_time = time.time() * 1000
        httpClient = httplib.HTTPConnection(url, 80, timeout=30)
        httpClient.request("POST", "", params, headers)
        end_time = time.time() * 1000
        spend_time =  end_time - start_time
        print 'Upload:'+str(len(data) / (spend_time / 1000))+ 'Byte/s'
        response = httpClient.getresponse()
        mdata = response.read()
        end_time = time.time() * 1000
        spend_time =  end_time - start_time
        #print response.status
        #print response.reason
        #print response.read()
        #print response.getheaders() #获取头信息
        print 'Download:'+str(len(mdata) / (spend_time / 1000))+ 'Byte/s'
    except Exception, e:
        print e
if __name__ == '__main__':
    print
    print '=======================HttpGet========================'
    data = 'name=zhangsan&age=12&nickname=haha&role=student'
    httpGet('www.baidu.com',data)
    print
    print '=======================HttpPost========================'
    data={'name': 'tom', 'age': 22}
    httpPost('www.baidu.com',data)
    print
大文件分割
# coding=utf-8 import httplib import mimetypes import os import uuid import socket,struct,time,sys import threading mimetypes.init() up_load_speed = 0 down_load_speed = 0 isComplete = False content_length=0 class builder: def __init__(self): self.boundary='--------ksc'+uuid.uuid4().hex; self.boundary='--------kscKKJFkfo93jmjfd0ismf' self.ItemHeaders=[]; self.CRLF='\n' def getBoundary(self): return self.boundary def getHeaders(self): '''return Request Headers''' headers={"Content-Type":"multipart/form-data, boundary="+self.boundary ,"Content-Length":self.getContentLength() } return headers def putItemHeader(self,fieldName,file_path): file_name=os.path.basename(file_path) print file_name file_name=file_name.encode('utf-8') file_type= mimetypes.guess_type(file_name)[0] #guess file's mimetype if file_type==None: file_type = "text/plain; charset=utf-8" print file_type CRLF=self.CRLF head = ''; head += '--' + self.boundary + CRLF; head += 'Content-Disposition: form-data; name="'+fieldName+'"; filename="' + file_name + '"'+CRLF; head += "Content-Type: "+file_type+CRLF head += CRLF; self.ItemHeaders.append({'head':head,'file_path':file_path}) def getContentLength(self): length=0 for item in self.ItemHeaders: length+=len(item['head'])+os.path.getsize(item['file_path'])+len(self.CRLF) return length+len("--" + self.boundary + "--"+self.CRLF) def getdata(self): blocksize= 1024 * 1024 for item in self.ItemHeaders: # yield item['head'] fileobj=open(item['file_path'],'rb') while True: block = fileobj.read(blocksize) if block: yield block else: yield self.CRLF break body = "--" +self.boundary + "--"+self.CRLF; yield body class MyHTTPConnection(httplib.HTTPConnection): def send(self, value): if self.sock is None: if self.auto_open: self.connect() print '-----------------ksc: reconnect' else: raise NotConnected() global isComplete try: if hasattr(value,'next'): print "--sendIng an iterable" for data2 in value: # print '----------Data length:------------'+str(len(data2)) start_time_up = time.time() * 1000 self.sock.sendall(data2) end_time_up = time.time() * 1000 spend_time_up = end_time_up - start_time_up global up_load_speed if spend_time_up != 0: up_load_speed = 'UpLoad Speed: ' + str(len(data2) / (spend_time_up / 1000) / 1024 / 1024) + 'MByte / s' isComplete = False time.sleep(1) # up_load_speed = str(len(data2) / (end_time_up - start_time_up) / 1024) + 'kByte / s' # print up_load_speed else: print '\n--send normal str' # self.sock.sendall(value) except socket.error, v: if v[0] == 32: # Broken pipe print(v) self.close() isComplete = True raise print '--send end' isComplete = True def get_up_load_speed(): print up_load_speed global timer timer = threading.Timer(1, get_up_load_speed,[]) if(isComplete == False): timer.start() def start(url,fileFieldName,file_path): bl=builder() bl.putItemHeader(fileFieldName, file_path) #注意web端post数据大小限制 #这里 php.ini post_max_size = 30M content_length=bl.getContentLength() print "content_length:"+str(content_length) # httpconnect=MyHTTPConnection('127.0.0.1',12307) httpconnect=MyHTTPConnection(url) global isComplete isComplete = False timer = threading.Timer(1, get_up_load_speed,[]) timer.start() headers = bl.getHeaders() data = bl.getdata() httpconnect.request('Get','', data ,headers) #httpres=httpconnect.getresponse() #print httpres.read() if __name__ == '__main__': PATH='D:/CentOS-7-x86_64-DVD-1611.iso' fileFieldName = 'testFile' print'--------------------------------------------------------------------' print' Net speed test ' print' ' print' 1.Input Ip with Port ' print' ' print' 2.Select Http Method ' print' ' print' 3.If method is Get then start else input filePath ' print'--------------------------------------------------------------------' URL = raw_input("Please input Ip with Port like 127.0.0.1:80>> ") METHOD = raw_input("Please input Http Method like post or get>> ") if METHOD == 'get': start(URL,fileFieldName,PATH) elif METHOD == 'post': PATH = raw_input("Please input file path you want to post>> ") start(URL,fileFieldName,PATH) else: sys.exit(0)
    http://www.cnblogs.com/makexu/

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号