python使用request库发送上传zip文件的post请求
使用工具:
- python(2.7)
- requests(2.18.4)
- zip文件一个
- chrome浏览器
第一步,通过chrome浏览器的开发者工具,获得发送的参数。
第二步,编写python代码
使用request库的post方法。注意的是要添加files参数,例如:
files ={'app_filename':open('portal-1.0-SNAPSHOT-fat.jar.zip','rb')}
zip压缩包用的后缀是application/x-zip-compressed,其他的文件是application/octet-stream
其中,’app_filename’是F12工具里抓出来的from data里的标有{binary}这一行的参数名。
portal-1.0-SNAPSHOT-fat.jar.zip是我自己电脑本地的一个zip文件。
rb是读二进制文件。因为这个form data是以二进制形式上传文件的
其余的常规参数,放到data参数里。例如上图的image_name:fff就是常规参数。
在header里注意添加cookies值或者Authorization值,这里我测试的网站用的是Authorization。如果没有该参数,会返回401
完整python request体参数如下:
path = os.path.split(os.path.realpath(__file__))[0]
url = host + '/dashboard/cicd/images'
headers = {
'Authorization':'6bae7b70-8dae-4f74-9631-680b9501b52',
'cookie': "_ga=GA1.3.733851079.1534745675; Hm_lvt_dde6ba2851f3db0ddc415ce0f895822e=1537859803; _ga=GA1.3.733851079.1534745675; Hm_lvt_dde6ba2851f3db0ddc415ce0f895822e=1537859803",
}
datat = {'image_name': 'abcd',
'image_description': 'ccccvcc',
'image_label': '1cc1fcc',
'basic_image': 'openjdk:10',
'store_path': '/opt/app/lzw/'}
files = {'app_filename': (
'portal-1.0-SNAPSHOT-fat.jar.zip', open(os.path.join(path, 'portal-1.0-SNAPSHOT-fat.jar.zip'), 'rb'),
'application/x-zip-compressed')}
# files ={'app_filename':open('portal-1.0-SNAPSHOT-fat.jar.zip','rb')} 和上面的功能一样
result = requests.post(url, files=files, data=datat, headers=headers)
r1 = result.text
print(result.text)
注意:千万不要在head里加入 ‘Content-Type’:’multipart/form-data;参数。