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

13 篇文章 1 订阅
2 篇文章 0 订阅

前面一章写过一篇简单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时。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ghost丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值