如何在 Python 中模拟 post 表单来上传文件

Python016

如何在 Python 中模拟 post 表单来上传文件,第1张

Python-Requests 非常方便。

我的某个上传文件代码(是的,multipart / form-data 上传就这一行)

r = requests.post (server('new'), files={'content' : open('test.md', 'rb')})

selenium提供的sendkeys方法上传文件我就不赘述,网上很多教程,但是缺点也很明显并不是完全适用各种场景如果上传文件不是input类型,就完全无法适用就算是input也不能完全适用亦没办法完全模拟用户的操作。

在执行当前输入路径地址的时候,必须切换为英文输入法,否则会导致输入地址后无法跳转需要注意在mac上必须打开安全性与隐私中的辅助功能完全控制。

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

在机器上安装了 Python 的

setuptools,可以通过下面的命令来安装 poster:

easy_install poster

装完之后,就可以像用下面代码模拟上传文件表单了:

from poster.encode import multipart_encode

from poster.streaminghttp import register_openers

import urllib2

# 在 urllib2 上注册 http 流处理句柄

register_openers()

# 开始对文件 "DSC0001.jpg" 的 multiart/form-data 编码

# "image1" 是参数的名字,一般通过 HTML 中的 <input> 标签的 name 参数设置

# headers 包含必须的 Content-Type 和 Content-Length

# datagen 是一个生成器对象,返回编码过后的参数

datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})

# 创建请求对象

request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)

# 实际执行请求并取得返回

print urllib2.urlopen(request).read()