python request file upload_Python基于requests實現模擬上傳文件

方法1:

1.安裝requests_toolbelt依賴庫

#代碼實現

def upload(self):

login_token = self.token.loadTokenList()

for token in login_token:

tempPassword_url = self.config['crm_test_api']+'/document/upload'

tempPassword_data = self.data_to_str.strToDict('''title:1.png

course_name_id:63

course_id:1112

desc:7

doc_type:1

is_public:1''',value_type='str')

files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}

tempPassword_data.update(files)

m = MultipartEncoder(

fields=tempPassword_data

)

tempPassword_headers = {"Content-Type": m.content_type, "token": token}

tempPassword_request = requests.post(url=tempPassword_url,data=m,headers=tempPassword_headers)

print(tempPassword_request.content)

2.組裝MultipartEncoder對象需要的參數:將tempPassword_data的字段合并至files

1.files參數介紹:

1.字典key對應file字段(我們系統是這樣,具體結合前端實際的字段為準),如圖

aaaencu1tpb.png

2.字典value里面的對象:

1.filename(服務器最終存儲的文件名)

2.filepath(具體的文件路徑,注意轉義),文件是以二進制的形式進行傳輸的,所以這里傳輸時以二進制的形式打開文件并傳輸

3.content_type:具體結合前端實際的字段為準:一般可定義為: 文本(text)/圖片(image)等[/code][code]

3.tempPassword_data:為文件上傳時的附帶參數

strToDict方法:自己手寫的一個字符串轉dict的方法

遇到的問題:

b40pfobu3pl.png

這個錯誤是說,int對象不能被編碼,所以需要手動將int對象轉換為str,所以我在此方法中定義了value_type這個參數,用于將字典中的所有value轉換為str類型

#具體代碼實現,僅供參考

def strToDict(str_in,value_type=None):

# value_type:轉換字典的value為指定的類型,未防止異常,目前僅支持str

# '''將str轉換為dict輸出'''

# '''將帶有time關鍵字的參數放到字符串末尾'''

# print(str_in)

if str_in:

match_str = ':'

split_str = '\n'

split_list = str_in.split(split_str)

str_in_dict = {}

for i in split_list:

colon_str_index = i.find(match_str)

if colon_str_index == -1:

# '''處理firefox復制出來的參數'''

match_str = '\t' or ' '

colon_str_index = i.find(match_str)

# '''去掉key、value的空格,key中的引號'''

str_in_key = i[:colon_str_index].strip()

str_in_key = str_in_key.replace('"','')

str_in_key = str_in_key.replace("'",'')

# 正則過濾無用key,只保留key第一位為字母數據獲取[]_

str_sign = re.search('[^a-zA-Z0-9\_\[\]+]', str_in_key[0])

if str_sign is None:

# 處理value中的空格與轉義符

str_in_value = i[colon_str_index + 1:].strip()

str_in_value=str_in_value.replace('\\','')

try:

# 遇到是object類型的數據轉換一下

str_in_value=eval(str_in_value)

except BaseException as error:

str_in_value=str_in_value

if value_type in ['str','string']:

str_in_value=str(str_in_value)

else:

str_in_value=str_in_value

str_in_dict[str_in_key] = str_in_value

return str_in_dict

else:

print("參數都沒有,還處理個球嘛")

return None

3.請求時將headers的content設置為m.content_type,會設置headers的content_type為form—data,類型為str:

MultipartEncoder相關源碼:

awvw320yifu.png

d2fcq1lyv4d.png

4.請求時設置data為m,會輸出一個MultipartEncoder對象:

zmod3njgt0k.png

方法2:

直接使用requests,無需依賴requests_toolbelt庫

過程大同小異,也是需要將字典的value轉換為str

注意:headers不要傳content_type字段,headers不要傳content_type字段,headers不要傳content_type字段

請求時:data對應附加參數,files對應files對象

#相關代碼

def upload(self):

login_token = self.token.loadTokenList()

for token in login_token:

tempPassword_url = self.config['crm_test_api']+'/document/upload'

tempPassword_data = self.data_to_str.strToDict('''title:1.png

course_name_id:63

course_id:1112

desc:7

doc_type:1

is_public:1''',value_type='str')

files={'file': ('1.png', open('C:\\Users\\Acer\\Pictures\\Screenshots\\1.png', 'rb'), 'image/png')}

tempPassword_headers = {"token": token}

tempPassword_request = requests.post(url=tempPassword_url,data=tempPassword_data,files=files,headers=tempPassword_headers)

print(tempPassword_request.json())

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文標題: Python基于requests實現模擬上傳文件

本文地址: http://www.cppcns.com/jiaoben/python/309090.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB中的randi函數

randi Pseudorandom integers from a uniform discrete distribution.來自一個均勻離散分布的偽隨機整數 R randi(IMAX,N) returns an N-by-N matrix containing pseudorandom integer values drawn from the discrete uniform distribution on 1:IMAX.返回一個NN的包含偽隨機…

C++ dll的隱式與顯式調用

轉載自:http://blog.sina.com.cn/s/blog_53004b4901009h3b.html   應用程序使用DLL可以采用兩種方式:一種是隱式鏈接,另一種是顯式鏈接。在使用DLL之前首先要知道DLL中函數的結構信息。Visual C6.0&…

《OpenGL ES 2.0游戲開發(上卷):基礎技術和典型案例》——6.5節光照的每頂點計算與每片元計算...

本節書摘來自異步社區《OpenGL ES 2.0游戲開發(上卷):基礎技術和典型案例》一書中的第6章,第6.5節光照的每頂點計算與每片元計算,作者 吳亞峰,更多章節內容可以訪問云棲社區“異步社區”公眾號查看 6.5 光照…

毛筆筆鋒算法IOS版

http://www.merowing.info/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/#.VUln2_mqpBe轉載于:https://www.cnblogs.com/wangjinming/p/4481145.html

USE PDFCREATE TO CREATE A PDF FILE

來源:http://www.pdfforge.org/files/old_forum/1002.html a working sample with C & COM 2007-08-15 22:56:18 by eckart hi, here is a working sample of how to use PDFCreator in Visual C (after searching on internet for something similar I guess t…

python將一行作為字段_關于python:Django admin在同一行顯示多個字段

我已經創建了一個模型,它將自動顯示模型中的所有字段,并將其顯示在管理頁面上。 現在,我有一個問題,我希望在同一行中有兩個字段,為此,我必須在modeladmin中指定字段集: 1 2 3 4 5fieldsets ( …

c++顯式加載dll并使用DLL的類

轉載自: http://blog.163.com/tianjunqiang666126/blog/static/8725911920121064573594/ 首先需要強調,當使用某個類時一般目的有二:實例化成對象或者繼承它產生新類。對于前者,我們可以構造一個抽象類&a…

如何在Debian上安裝配置ownCloud

如何在Debian上安裝配置ownCloud 據其官方網站,ownCloud可以讓你通過一個Web界面或者WebDAV訪問你的文件。它還提供了一個平臺,可以輕松地查看、編輯和同步您所有設備的通訊錄、日歷和書簽。盡管ownCloud與廣泛使用Dropbox非常相似,但主要區別…

jQuery相當于對 javascript二次開發,所以基于 jQuery實現的各種插件直接調用即可...

jQuery相當于對 javascript二次開發,所以基于 jQuery實現的各種插件直接調用即可轉載于:https://www.cnblogs.com/npk19195global/p/4482363.html

[轉]js判斷url是否有效

本文轉自:http://www.cnblogs.com/fumj/p/3490121.html 方法一:(僅適用于ie) function CheckStatus(url){XMLHTTP new ActiveXObject("Microsoft.XMLHTTP")XMLHTTP.open("HEAD",url,false)XMLHTTP.send()return XMLHTTP.status200}function Ne…

VS中lib和dll

轉載: http://www.cnblogs.com/Yogurshine/archive/2013/06/14/3136025.html Lib文件 先來說一說lib文件,C中lib文件主要有兩類,一種是靜態的編譯連接,叫做靜態鏈接庫,另一種是動態的編譯鏈…

32位md5解密_冰蝎特征檢測及報文解密

點擊“藍字”關注我們,不迷路~??前言19年駐場于某金融單位。參加19年9月、11月兩次攻防演練,負責攻防演練組織、技術支持和復盤。期間,多個攻擊隊伍使用冰蝎 webshell ,防守方監測時確實各 IDS 確實報出 webshell 連接&#xff…

使用extern C改善顯式調用dll

extern "C"的簡單解析 我們前面介紹了顯式調用dll的方法,例如 http://www.cnblogs.com/laogao/archive/2012/12/07/2806528.html ,其中在GetProcAddress第二個參數的填寫煞費苦心,我們需要比較麻煩…

《移動App測試的22條軍規》—App測試綜合案例分析23.13節測試微信App的流量和電量消耗...

本節書摘來自異步社區《移動App測試的22條軍規》一書中的App測試綜合案例分析,第23.13節測試微信App的流量和電量消耗,作者黃勇,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 23.13 測試微信App的流量和電量消耗關于微信App消耗流…

UVA 10269 Super Mario,最短路+動態規劃

這個題目我昨晚看到的,沒什么思路,因為馬里奧有boot加速器,只要中間沒有城堡,即可不耗時間和腳力,瞬間移動不超過L距離,遇見城堡就要停下來,當然不能該使用超過K次。。。我糾結了很久&#xff0…

python做數據可視化的代碼_Python數據可視化正態分布簡單分析及實現代碼

Python說來簡單也簡單,但是也不簡單,尤其是再跟高數結合起來的時候。。。 正態分布(Normaldistribution),也稱“常態分布”,又名高斯分布(Gaussiandistribution),最早由A…

ACdream 1061(abs用法)

題目鏈接:http://acdream.info/problem?pid1061 主要是abs用法,看題目的數據 long long的最大值:9223372036854775807 long long的最小值:-9223372036854775808 unsigned long long的最大值:18446744073709551615 由題…

wpf window 不執行show 就不能load執行_Numpy反序列化命令執行漏洞分析(CVE-2019-6446)附0day...

1、介紹 NumPy 是 Python 機器學習庫中之一,主要對于多為數組執行計算。NumPy 提供大量的 函數和操作,能夠幫助程序員便利進行數值計算。在 NumPy 1.16.0 版本之前存在反序列化 命令執行漏洞,用戶加載惡意的數據源造成命令執行。2、環境 軟件…

使用Def文件導出dll

前面我們介紹了dll的生成,大多數是使用extern "C"__declspec(dllexport)函數名的方法導出dll。其實我們還有另一種方法來導出dll。 先介紹參考文獻: 1.dll導出聲明相關 2.VS2012中 C創建DLL圖解 3.DLL中導出函數的兩種方式(dllexport與.…

HDU 1003 Maxsum

題目大意&#xff1a;求出數列的最大子段和&#xff0c;并且說明是從第幾項至第幾項。 題解1&#xff1a;簡單貪心。 #include <cstdio> #define rep(i,n) for(int i1;i<n;i) int main(){int t,l0;scanf("%d",&t);while(t--&&l){if(l!1)printf…