python模拟网页上传文件_python模拟网页上传文件
在开发过程中经常有需要上传文件,而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模拟网页上传文件相关推荐
- python爬取动态页面图片_python动态网页爬取:爬取pexel上的图片
前言 同样的,我们在写一个爬虫前要明确自己想要爬取的东西是什么,明确下载目标数据在浏览器的操作如何 对于动态网页的爬取,在网页地址不变的情况下,我们首先要明确如何获取AJAX请求 首先我们看看这个网站 ...
- python实现登陆注册跳转_Python模拟登录和登录跳转的参考示例
# coding:utf-8 import urllib import urllib2 import cookielib from bs4 import beautifulsoup # 设置登录url ...
- python高级教程html文件_Python之html转docx文件高级用法
说到word文档转html的,网上一搜一大把,各种在线word转html页面,使用起来也方便.但是在实际项目中要使用的话,需要自己开发,这里就提供一个简单的方法. 后缀 .doc 和 .docx 都是 ...
- python怎么调用文件_python 中如何引用头文件
python 引入 导入 自定义模块, python 引入 导入 外部文件 python 引入 导入 自定义模块, python 引入 导入 外部文件 项目中想使用以前的代码,或者什么样的需求致使你 ...
- python pandas 处理相同标题的csv文件_Python使用pandas处理CSV文件的实例讲解
Python中有许多方便的库可以用来进行数据处理,尤其是Numpy和Pandas,再搭配matplot画图专用模块,功能十分强大. CSV(Comma-Separated Values)格式的文件是指 ...
- python读取excel内容和写入_Python读取和写入Excel文件
制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...
- python读取docx的内容输出_Python应用 , 读写docx文件!
字处理软件是平时办公必备的同时也是最常用的软件之一,而字处理软件用的最多最频繁的就是微软的word,其扩展名为docx.在日常工作中,可能需要对很多的docx文件进行批处理,例如教师在批阅学生提交的电 ...
- python我想对你说_python学习第6天----文件操作
1.文件操作 python中通过open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可进行各种操作(句柄就相当于一个变量),文件句柄是一个可迭代对象 打开文件的操作有:r,w,a,r+,w ...
- python读取所有txt文件_python如何批量读取txt文件
python批量读取txt文件的方法:首先导入系统模块:然后将文件夹路径更改为需要批量读取的txt文件存放的路径:再调用系统模块得到该文件夹下的所有文件名称:最后遍历文件夹,读取txt文件. 如果文件 ...
- python导入mat文件_python读取并写入mat文件的方法
先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...
最新文章
- P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★
- Visual Studio 2013编译Mozilla NPAPI 示例注意事项
- rac安装grid报INS-41112错误
- 移动广告平台到底哪个好?哪个能赚的米米多?
- 【java新】Optional pk 空指针
- matlab多径误差包络,MIMO-OFDM系统添加多径信道仿真结果误差很大
- Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施
- POJ 2417 Discrete Logging 离散对数
- 靶场环境vulhub的安装
- python 中 try、except、finally的用法(异常处理)
- ASP.NET的MVC中使用Cookie做身份验证(附代码下载)
- 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...
- 一个菜鸟从高一到大二的作品整理
- [function.require]: Failed opening required 杰奇cms
- Centos7 安装maven
- project文件_移动和发出时通过UploadsReWriter读取的任意文件
- (设计模式之一)浅析简单工厂模式
- 【最小割】HDU 4289 Control
- jQuery命令汇总(转)
- 支持秒赞的php脚本一键安装,easy-hiphop一键安装hiphop脚本