HTTP 文件下载上传之系列问题-python

前面一章写过一篇简单http服务器搭建的文章,此篇为子类(手动滑稽),大牛绕道.

关于http文件传输要再不同的服务器之间链接并传输文件遇到的问题并解决方法。

主要写GET方法到server端下载文件

server:

 def do_GET(self):
        if remote_file :#remote_file是本地目录下的所有文件路径的集合,比如/home/ly/server/trojan/*
            file_path=remote_file.pop()
            f=open(file_path,"rb")
            self.protocal_version = "HTTP/1.1"
            self.send_response(200)
            self.send_header("Content-Type","multipart/form-data")#发现不加头的话传输过去的文件总会少了100+B
            self.send_header("Content-Disposition",file_path)#这是利用http头传输文件名,因为client端保存下来的文件不可能随便命名,要和原文件保持一致
            self.end_headers()
            self.wfile.write(f.read())
            f.close()
            print remote_file
        return
client:

#coding=utf-8
import requests
import os
url = "http://172.16.1.101:8080"
r = requests.get(url,stream=True)
_,file_name=os.path.split(r.headers.get("Content-Disposition")) #获取HTTP头中的文件名
dir_name="/home/ly/new"
path=os.path.join(dir_name,file_name)
with open(path,"wb") as f:    
    for chunk in r.iter_content(chunk_size=512)
        if chunk :
            f.write(chunk)
用接口iter_content(chunk_size=1)或者iter_lines(chunk_size=512),chunk_size可以设置你指定的大小,指定每次获取数据的最大值,注意:并不是每次请求回来的content块都是chunk_size指定的大小。
stream=True是关键,这个参数指定响应内容体(response.content)为流。默认为False,在请求时将content一并全部加载;如果调用response.content仍然是全部加载,然后在执行后面的代码,只是加载时机变成了第一次调用response.content时。



你可能感兴趣的:(python,随手笔记,TCPIP)