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)

 

posted @ 2017-07-28 01:23  桃源仙居  阅读(194)  评论(0)    收藏  举报