python實(shí)現(xiàn)requests發(fā)送/上傳多個(gè)文件的示例
1、需要的環(huán)境
Python2.X
Requests 庫(kù)
2、單字段發(fā)送單個(gè)文件
在requests中發(fā)送文件的接口只有一種,那就是使用requests.post的files參數(shù), 請(qǐng)求形式如下:
url = "http://httpbin.org/post"
data = None
files = { ... }
r = requests.post(url, data, files=files)
而這個(gè)files參數(shù)是可以接受很多種形式的數(shù)據(jù),最基本的2種形式為:
字典類型
元組列表類型
2.1、字典類型的files參數(shù)
官方推薦使用的字典參數(shù)格式如下:
{
"field1" : ("filename1", open("filePath1", "rb")),
"field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"),
"field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})
}
這個(gè)字典的key就是發(fā)送post請(qǐng)求時(shí)的字段名, 而字典的value則描述了準(zhǔn)備發(fā)送的文件的信息;從上面可以看出value可以是2元組,3元組或4元組;
這個(gè)元組的每一個(gè)字段代表的意思一次為:
("filename", "fileobject", "content-type", "headers")
缺省的話則會(huì)使用默認(rèn)值
除了上面的使用形式,其實(shí)requests還是支持一個(gè)更簡(jiǎn)潔的參數(shù)形式,如下
{
"field1" : open("filePath1", "rb")),
"field2" : open("filePath2", "rb")),
"field3" : open("filePath3", "rb"))
}
這種形式的參數(shù)其等同效果如下, 其中filename是filepath的文件名:
{
"field1" : ("filename1", open("filePath1", "rb")),
"field2" : ("filename2", open("filePath2", "rb")),
"field3" : ("filename3", open("filePath3", "rb"))
}
當(dāng)然,你還可以這樣發(fā)送一個(gè)文件請(qǐng)求
{
"field1" : open("filePath1", "rb").read())
}
這里的filename的值為field1
2.2、元組列表類型的files參數(shù)
其實(shí)元組列表的形式與字典的形式基本一樣,除了最外層的包裝不一樣;而在requests內(nèi)部最終會(huì)把字典參數(shù)形式 轉(zhuǎn)換 為 元組列的形式。官網(wǎng)推薦的用法如下:
[
("field1" : ("filename1", open("filePath1", "rb"))),
["field2" : ("filename2", open("filePath2", "rb"), "image/jpeg")],
("field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}))
]
列表里面的子項(xiàng)可以是元組,也可以是列表;同樣這里也支持簡(jiǎn)介的形式,如下:
[
("field1" : open("filePath1", "rb"))), ##filename 使用的是filepath的文件名
("field2" : open("filePath2", "rb").read())) ##filename 使用的是鍵值,即 field2
]
3、單字段發(fā)送多個(gè)文件【即上傳文件時(shí),設(shè)置為多選了】
3.1、字典參數(shù)形式
{
"field1" : [
("filename1", open("filePath1", "rb")),
("filename2", open("filePath2", "rb"), "image/png"),
open("filePath3", "rb"),
open("filePath4", "rb").read()
]
}
3.2、元組列表形式
[
("field1" , ("filename1", open("filePath1", "rb"))),
("field1" , ("filename2", open("filePath2", "rb"), "image/png")),
("field1" , open("filePath3", "rb")),
("field1" , open("filePath4", "rb").read())
]
上面2種形式發(fā)送的請(qǐng)求,所有的文件都會(huì)在同一個(gè)字段下,后臺(tái)服務(wù)只要從field1字段就可以獲取全部的文件對(duì)象
4、同時(shí)發(fā)送普通數(shù)據(jù)字段
上面介紹的是使用發(fā)送文件內(nèi)容請(qǐng)求,而有時(shí)候我們?cè)诎l(fā)送文件的同時(shí)還需要發(fā)送普通的數(shù)據(jù)字段,此時(shí)普通數(shù)據(jù)字段直接存在data參數(shù)中即可,如下:
data = {"k1" : "v1"}
files = {
"field1" : open("1.png", "rb")
}
r = requests.post("http://httpbin.org/post", data, files=files)
以上這篇python實(shí)現(xiàn)requests發(fā)送/上傳多個(gè)文件的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用python爬蟲實(shí)現(xiàn)網(wǎng)絡(luò)股票信息爬取的demo
下面小編就為大家分享一篇使用python爬蟲實(shí)現(xiàn)網(wǎng)絡(luò)股票信息爬取的demo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
python利用高階函數(shù)實(shí)現(xiàn)剪枝函數(shù)
這篇文章主要為大家詳細(xì)介紹了python利用高階函數(shù)實(shí)現(xiàn)剪枝函數(shù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法
這篇文章主要介紹了Python根據(jù)指定日期計(jì)算后n天,前n天是哪一天的方法,涉及Python日期與時(shí)間計(jì)算相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
解決Python爬蟲錯(cuò)誤之twisted.web.error.SchemeNotSupported: Unsu
這篇文章主要介紹了解決Python爬蟲錯(cuò)誤之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
對(duì)python 合并 累加兩個(gè)dict的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python 合并 累加兩個(gè)dict的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python保留小數(shù)函數(shù)的幾種使用總結(jié)
本文主要介紹了python保留小數(shù)函數(shù)的幾種使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

