在开发过程中经常有需要上传文件,而python上传文件官方并不直接支持,网上的大部分方案都是用python poster库来支持文件上传,用这种方式上传文件确实也特别的简单。

今天我要介绍的是模拟网页来上传文件,这样不需要依赖第三方库,使用和传播都更加的方便。

既然是模拟网页提交,我们先来看看网页上传文件到底上传了什么内容?

这是请求的header,我们主要关注的是Content-Length、Content-Type、和提交的数据,如果上传文件涉及到身份的验证,可能还需要关注Cookie

这是提交的内容,总共提交了四个字段

app   字符串  值为dlife

platform 字符串  值为android

type  字符串   值为package

file 文件 文件流

可以看到一些规律,字符型数据都是如下的内容

------WebKitFormBoundarywxxHf5sLp9I0dQCs Content-Disposition: form-data; name="app" dlife

总共分为4行

第一行 ——WebKitFormBoundarywxxHf5sLp9I0dQCs  boundary值,和Content-Type里面boundary一致,boundary是内容之间的分隔符

第二行 Content-Disposition: form-data; name=”app”   数据类型和字段名称

第三行 为空(\r\n)

第四行 dlife 是字段app的值

如果内容是文件的话还多了一行Content-Type: application/octet-stream ,就是文件类型,比如android apk文件类型是application/vnd.android.package-archive,这个可以用python mimetypes.guess_type(file)方法获取文件类型

代码如下:

组合请求参数

def get_request_param(params, boundary):

"""

获取请求的参数

args:

params: 请求的参数

boundary: 上传的boundary

return:

string: 请求参数

"""

body = ''

if len(params) > 0:

CRLF = '\r\n'

for key in params.keys():

value = params[key]

body += '--' + boundary + CRLF

if os.path.exists(value):

file_type = mimetypes.guess_type(value)[0]

file_name = os.path.basename(value)

if file_type is None:

file_type = "text/plain; charset=utf-8"

body += 'Content-Disposition: form-data; name="' \

+ key + '"; filename="' + file_name + '"' + CRLF

body += "Content-Type: " + file_type + CRLF

body += CRLF

body += open(value, 'rb').read() + CRLF

else:

body += 'Content-Disposition: form-data; name="' + key + '"' + CRLF

body += CRLF

body += value + CRLF

body += "--" + boundary + "--" + CRLF

return body

上传文件

import urllib

import urllib2

import cookielib

import json

import sys

import os

import uuid

import mimetypes

upload_url = host + 'admin/app-package'

boundary = '--------ksc' + uuid.uuid4().hex

param = {

'file': apk_url,

'app': app,

'platform': platform,

'type': 'package'

}

request_data = get_request_param(param, boundary)

req = urllib2.Request(upload_url)

req.add_header("User-Agent", 'ksc')

req.add_header("Content-Type", "multipart/form-data, boundary=" + boundary)

res = urllib2.urlopen(req, request_data)

content = res.read().decode('utf-8')

python模拟网页上传文件_python模拟网页上传文件相关推荐

  1. python爬取动态页面图片_python动态网页爬取:爬取pexel上的图片

    前言 同样的,我们在写一个爬虫前要明确自己想要爬取的东西是什么,明确下载目标数据在浏览器的操作如何 对于动态网页的爬取,在网页地址不变的情况下,我们首先要明确如何获取AJAX请求 首先我们看看这个网站 ...

  2. python实现登陆注册跳转_Python模拟登录和登录跳转的参考示例

    # coding:utf-8 import urllib import urllib2 import cookielib from bs4 import beautifulsoup # 设置登录url ...

  3. python高级教程html文件_Python之html转docx文件高级用法

    说到word文档转html的,网上一搜一大把,各种在线word转html页面,使用起来也方便.但是在实际项目中要使用的话,需要自己开发,这里就提供一个简单的方法. 后缀 .doc 和 .docx 都是 ...

  4. python怎么调用文件_python 中如何引用头文件

    python 引入 导入 自定义模块, python 引入 导入 外部文件 python 引入 导入 自定义模块, python 引入  导入 外部文件 项目中想使用以前的代码,或者什么样的需求致使你 ...

  5. python pandas 处理相同标题的csv文件_Python使用pandas处理CSV文件的实例讲解

    Python中有许多方便的库可以用来进行数据处理,尤其是Numpy和Pandas,再搭配matplot画图专用模块,功能十分强大. CSV(Comma-Separated Values)格式的文件是指 ...

  6. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  7. python读取docx的内容输出_Python应用 , 读写docx文件!

    字处理软件是平时办公必备的同时也是最常用的软件之一,而字处理软件用的最多最频繁的就是微软的word,其扩展名为docx.在日常工作中,可能需要对很多的docx文件进行批处理,例如教师在批阅学生提交的电 ...

  8. python我想对你说_python学习第6天----文件操作

    1.文件操作 python中通过open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可进行各种操作(句柄就相当于一个变量),文件句柄是一个可迭代对象 打开文件的操作有:r,w,a,r+,w ...

  9. python读取所有txt文件_python如何批量读取txt文件

    python批量读取txt文件的方法:首先导入系统模块:然后将文件夹路径更改为需要批量读取的txt文件存放的路径:再调用系统模块得到该文件夹下的所有文件名称:最后遍历文件夹,读取txt文件. 如果文件 ...

  10. python导入mat文件_python读取并写入mat文件的方法

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...

最新文章

  1. P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★
  2. Visual Studio 2013编译Mozilla NPAPI 示例注意事项
  3. rac安装grid报INS-41112错误
  4. 移动广告平台到底哪个好?哪个能赚的米米多?
  5. 【java新】Optional pk 空指针
  6. matlab多径误差包络,MIMO-OFDM系统添加多径信道仿真结果误差很大
  7. Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施
  8. POJ 2417 Discrete Logging 离散对数
  9. 靶场环境vulhub的安装
  10. python 中 try、except、finally的用法(异常处理)
  11. ASP.NET的MVC中使用Cookie做身份验证(附代码下载)
  12. 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...
  13. 一个菜鸟从高一到大二的作品整理
  14. [function.require]: Failed opening required 杰奇cms
  15. Centos7 安装maven
  16. project文件_移动和发出时通过UploadsReWriter读取的任意文件
  17. (设计模式之一)浅析简单工厂模式
  18. 【最小割】HDU 4289 Control
  19. jQuery命令汇总(转)
  20. 支持秒赞的php脚本一键安装,easy-hiphop一键安装hiphop脚本

热门文章

  1. 高亮插件Highlighting的使用
  2. android tab activity,Android   ActivityGroup和TabActiviy的差异性
  3. 服务器的硬盘内存型号大小怎么查看,怎么查服务器硬盘和内存大小
  4. Python分析王者峡谷中英雄信息
  5. python上的表白代码_用Python实现表白代码
  6. OKR怎么写?100个OKR案例模板
  7. Win10 重装系统备忘
  8. OpenCV基础教程大全
  9. Android Navigation 详解
  10. wap网游php源码,wap 文字游戏