1、打开fiddler,在UI界面中,选择文件,进行上传文件操作
2、在Fiddler中,检索刚才上传文件的请求,查看上传文件的请求报文
从请求报文内容中摘出一般情况下上传文件的主要内容及格式:
POST https://ip:port/MyInfo/Ajax/UploadPhoto.ashx HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5c33BeLjdO5AMYhR
Cookie: XXX=xxx
------WebKitFormBoundary5c33BeLjdO5AMYhR
Content-Disposition: form-data; name=“uploadFile_963”; filename=“01-linux -14.jpg”
Content-Type: image/jpeg
上传文件的二进制内容
------WebKitFormBoundary5c33BeLjdO5AMYhR–
对以上请求响应内容进行解析
以下几点内容可作为了解
2.1 请求头headers中的"boundary=----WebKitFormBoundary5c33BeLjdO5AMYhR",一般用系统时间(一串数字)来做为boundary值
2.2 请求体body中的"WebKitFormBoundary5c33BeLjdO5AMYhR"和"WebKitFormBoundary5c33BeLjdO5AMYhR":前面的"------“不可省l略,它是做为分隔符存在的
2.3 ------{boundary} http协议的Form的分隔符,表示结束的话在其后面加”–",例如上述最后一个
“------WebKitFormBoundary5c33BeLjdO5AMYhR–”,另外在每一段信息描述后要跟一个\r\n再跟文件数据,文件数据后面也要跟一个\r\n
2.4 多文件上传必须用multipart/mixed
重要内容解析
2.5 请求头中的Content-Type告诉客户端使用表单上传文件,请求体中的Content-Type表示上传文件的文件类型,如果不知道文件类型的话,可以设为application/octet-stream,以二进制流的形式上传下载
2.6 请求的Cookie信息根据需求进行自定义
2.7 通过请求体中Content-Disposition: form-data; name=“uploadFile_963”; filename="01-linux -14.jpg"中name=“uploadFile_963"来构建请求参数:
2.7.1 name=“uploadFile_963”:文件参数的名字,构建uploadFile_963参数,参数值以元组方式传入
第一个参数值:filename,填入上传文件的名称
第二个参数值:填入文件路径,并以读二进制的方式打开:open(r"XXX\xx\01-linux基础-14.jpg”,“rb”)
第三个参数值:文件的格式Content-Type: image/jpeg,可选
2.7.2 构建文件请求参数
file_data = {
“uploadFile_963” : (“01-linux基础-14.jpg”,open(r"C:\Users\hyongchang\Desktop\01-linux基础-14.jpg",“rb”))
}
2.8 调用接口进口进行文件上传
rquests.post(upload_url,files=file_data,cookies=cookies)