前言
在提交表單操作的時候,經常會遇到圖片上傳的操作,圖片上傳是一個單獨的接口,本篇以禪道為例,介紹如何上傳圖片
上傳接口
1.以禪道上提交bug為例,在選擇圖片時,點確定按鈕,就是上傳圖片了
2.用fiddler抓包,查看抓到的接口,以下這種接口就是multipart/form-data
- Content-Type: multipart/form-data
- body參數是這種格式:
-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"
yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png
先登錄
1.因為上傳圖片是在登錄之后操作的,這個需要依賴用戶登錄
# coding:utf-8
import requests
base = 'http://127.0.0.1:81/' # 禪道的服務器地址
loginUrl = base+"/zentao/user-login.html"
h = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://127.0.0.1/zentao/user-login.html",
# "Cookie": # 頭部沒登錄前不用傳cookie,因為這里cookie就是保持登錄的
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
}
body = {"account":"admin",
"password":"e10adc3949ba59abbe56e057f20f883e",
"keepLogin[]":"on",
"referer":"http://127.0.0.1/zentao/my/"
}
s = requests.session() # 保持會話
r = s.post(loginUrl, data=body, headers=h)
print r.content # 打印結果看到location='http://127.0.0.1/zentao/my/'說明登錄成功了
上傳圖片
1.上傳圖片以下這種格式:
-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"
yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png
2.寫成字典格式,key對應name="imgFile"這里name對應的值
3.value里面是一個元組()
- 第一個參數是filename=后面對應的值,沒有就寫None
- 第二個是上面的這個值“”yoyoketang.png“”,或者是文件open打開的二進制流
- 第三個是Content-Type對應的類型,如:"image/png"
f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\1.png", "rb"), "image/png")
}
驗證是否上傳成功
1.獲取上傳后的地址,放到瀏覽器的地址欄請求下,看是不是剛才上傳的圖片
參考代碼
# coding:utf-8
import requests
base = 'http://127.0.0.1:81/' # 禪道的服務器地址
loginUrl = base+"/zentao/user-login.html"
h = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://127.0.0.1/zentao/user-login.html",
# "Cookie": # 頭部沒登錄前不用傳cookie,因為這里cookie就是保持登錄的
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
}
body = {"account":"admin",
"password":"e10adc3949ba59abbe56e057f20f883e",
"keepLogin[]":"on",
"referer":"http://127.0.0.1/zentao/my/"
}
s = requests.session() # 保持會話
r = s.post(loginUrl, data=body, headers=h)
print r.content # 打印結果看到location='http://127.0.0.1/zentao/my/'說明登錄成功了
# 上傳圖片
url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"
f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")
}
r = s.post(url1, files=f)
try:
jpgurl = base+r.json()["url"]
print(u"上傳圖片后的url地址:%s"%jpgurl)
except Exception as msg:
print(u"返回值不是json格式:%s"%str(msg))
print(r.content)
---------------------------------python接口自動化完整版-------------------------
全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
作者:上海-悠悠 QQ交流群:588402570
也可以關注下我的個人公眾號:yoyoketang