python使用request库发送上传zip文件的post请求

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;参数。


苏ICP备18047533号-2