欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用requests.post方法傳遞form-data類(lèi)型的Excel數(shù)據(jù)的示例代碼

 更新時(shí)間:2024年01月28日 11:05:23   作者:weixin_43962547  
這篇文章介紹了python使用requests.post方法傳遞form-data類(lèi)型的Excel數(shù)據(jù)的示例代碼,某些post接口,需要發(fā)送multipart/form-data類(lèi)型的數(shù)據(jù),如何使用python requests來(lái)模擬這種類(lèi)型的請(qǐng)求發(fā)送呢?補(bǔ)充講解了python使用requests post請(qǐng)求發(fā)送form-data類(lèi)型數(shù)據(jù),一起看看吧

python使用requests.post方法傳遞form-data類(lèi)型的Excel數(shù)據(jù)

import datetime
import json
import random
import string
import requests
from requests_toolbelt import MultipartEncoder
# 在企業(yè)微信群里發(fā)消息
def log(day):
	url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx'
	headers = {
		"Content-Type":"application/json"
	}
	data = {
		"msgtype":"text",
		"text":{
			"content":"xxx"
		}
	}
	response = requests.post(url=url,headers=headers,data=json.dumps(data))
	print(response.status_code)
	print(response.text)
# 測(cè)試環(huán)境
# url = "https://xxx"
# 生產(chǎn)環(huán)境
url = "https://xxx"
# 定義字符集
chars = string.ascii_lowercase+string.digits+string.ascii_uppercase
# 生成長(zhǎng)度為32的隨機(jī)字符串
random_str = ''.join(random.sample(chars, 32))
print(random_str)
# 設(shè)置日期
day = ((datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d"))
# 配置數(shù)據(jù)
data = MultipartEncoder({
	'requestId':random_str,
	'docType':'invoice',
	# 'application/octet-stream'這個(gè)可以通過(guò)apifox等軟件post一次后看請(qǐng)求內(nèi)容獲取
	'file': ('xxx.csv', open('xxx.csv', 'rb'), 'application/octet-stream'),
	# 'file': ('xxx.csv'), open(xxx.csv', 'rb'), 'application/octet-stream'),
})
# 配置請(qǐng)求頭
headers = {
   # 'Authorization': 'Bearer xxx',    # 測(cè)試環(huán)境
   'Authorization': 'Bearer xxx',  # 生產(chǎn)環(huán)境
   'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
   'Accept': '*/*',
   # 'Host': 'xxx',   # 測(cè)試環(huán)境
   'Host': 'xxx',     # 生產(chǎn)環(huán)境
   'Connection': 'keep-alive',
   'Content-Type': data.content_type
}
print(data.content_type)
# 返回結(jié)果
response = requests.post(url, headers=headers, data=data)
print(response.text)
if json.loads(response.text)['code'] == "200":
	print("ok")
	log(day)

補(bǔ)充:

python 使用requests post請(qǐng)求發(fā)送form-data類(lèi)型數(shù)據(jù)

某些post接口,需要發(fā)送multipart/form-data類(lèi)型的數(shù)據(jù),如何使用python requests來(lái)模擬這種類(lèi)型的請(qǐng)求發(fā)送呢?

根據(jù)http/1.1rfc 2616的協(xié)議規(guī)定,我們的請(qǐng)求方式有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等。

http協(xié)議規(guī)定以ASCII碼傳輸,建立在tcp,ip協(xié)議之上的引用規(guī)范。規(guī)范內(nèi)容把http請(qǐng)求分成3個(gè)部分:狀態(tài)行,請(qǐng)求頭,請(qǐng)求體。所有的方法,實(shí)現(xiàn)都是圍繞如何使用和組織這三部分來(lái)完成了,萬(wàn)變不離其宗。

post請(qǐng)求有兩種編碼格式:application/x-www-form-urlencoded 和multipart/form-data

  • application/x-www-form-urlencoded 常用在前端表單提交時(shí),參數(shù)格式為:key=value&key=value。
  • 如果參數(shù)中有特殊字符,則要進(jìn)行url編碼,編碼格式就是application/x-www-form-urlencoded(規(guī)則:將鍵值對(duì)的參數(shù)用&連接起來(lái);有空格轉(zhuǎn)換為+加號(hào);有特殊符號(hào)轉(zhuǎn)換為ASCII HEX值)。
        如:參數(shù)值中有&,需要轉(zhuǎn)換為ASCII HEX值%26,對(duì)應(yīng)ASCII中38位置的&。
  • application/x-www-form-urlencoded是瀏覽器默認(rèn)的編碼格式。對(duì)于Get請(qǐng)求,是將參數(shù)轉(zhuǎn)換為?key=value&key=value格式,連接到url后。

multipart/form-data

multipart/form-data格式不僅可以傳輸參數(shù),還可以傳輸文件。也是在post基礎(chǔ)上演變而來(lái)的,具體如下:

  • multipart/form-data的基礎(chǔ)方式是post,即基于post請(qǐng)求來(lái)實(shí)現(xiàn)的。
  • multipart/form-data與普通post方法的不同之處在于請(qǐng)求頭和請(qǐng)求體。
  • multipart/form-data的請(qǐng)求頭必須包含一個(gè)特殊的頭信息:Content-Type,其值也必須為multipart/form-data;同時(shí)還需要規(guī)定一個(gè)內(nèi)容分割用于分割請(qǐng)求體中不同參數(shù)的內(nèi)容。
    具體的頭信息如下:Content-Type: multipart/form-data; boundary=${bound}
  • multipart/form-data的請(qǐng)求體也是一個(gè)字符串,和普通post請(qǐng)求的不同之處在于它的構(gòu)造方式。普通post請(qǐng)求是簡(jiǎn)單的鍵值對(duì)連接,而multipart/form-data則是添加了分隔符、參數(shù)描述信息等內(nèi)容的構(gòu)造體。

關(guān)于boundary:

  • 上面說(shuō)到普通post請(qǐng)求使用 & 來(lái)分隔參數(shù),那服務(wù)器使用multipart/form-data格式接收POST請(qǐng)求時(shí),使用何種方式來(lái)分割參數(shù)的呢?答案是boundary。
  • 由上圖可以發(fā)現(xiàn),HTTP的Body中使用兩個(gè)短橫線”–”加上boundary字符串作為不同參數(shù)的分割,而且不管是值參數(shù)(Value)還是文件參數(shù)(File)在Boundary內(nèi)部都有自己的描述信息,并不是URL參數(shù)的簡(jiǎn)單移動(dòng)。

并且在結(jié)束的時(shí)候,不僅前綴要加雙短橫線,后綴也要加,代表結(jié)束。

boundary快問(wèn)快答:

Q:boundary的值是用戶可以自由定義的嗎?
A:是的,但為了避免和正常文本重復(fù)了,盡量要使用復(fù)雜一點(diǎn)的內(nèi)容。

Q:boundary的作用?
A:分割參數(shù),類(lèi)似于普通post請(qǐng)求中的 &

使用python發(fā)送multipart/from-data類(lèi)型數(shù)據(jù)

有兩種方式:

  • 手動(dòng)組建form-data并修改headers
  • 通過(guò)files參數(shù)傳遞form-data,推薦此種方式,這里只說(shuō)這種方式

在官方網(wǎng)站上,requests模擬一個(gè)表單數(shù)據(jù)的格式如下:

files = {{name}: (<filename>, <file object>,<content type>, <per-part headers>)}

這一行模擬出來(lái)的post數(shù)據(jù)為:

Content-Disposition: form-data; name={name};filename=<filename>
Content-Type: <content type>
<file object>
--boundary

注:如果filename 和 content-Type不寫(xiě),那么響應(yīng)模擬post的數(shù)據(jù)就不會(huì)有二者。

通過(guò)上述說(shuō)明,我們可以構(gòu)造出files后直接post請(qǐng)求發(fā)送即可:

files = {
    'schoolId': (None, -1),
    'schoolName': (None, ""),
    "reward": (None, 5),
    "publishText": (None, "測(cè)試測(cè)試"),
    "tags": (None, 1),
    'image': ('image.jpg', open('%s/resource/upload_images/image.jpg' % PATH_DIR, 'rb'), 'application/octet-stream')
}
response = requests.post(url, files=files)

豬豬俠要努力呀!

到此這篇關(guān)于python使用requests.post方法傳遞form-data類(lèi)型的Excel數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python使用requests.post方法傳遞Excel數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python設(shè)置代理和添加鏡像源的方法

    python設(shè)置代理和添加鏡像源的方法

    這篇文章主要介紹了python設(shè)置代理和添加鏡像源介紹,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python迭代器、生成器、協(xié)程使用方式

    Python迭代器、生成器、協(xié)程使用方式

    這篇文章主要介紹了Python迭代器、生成器、協(xié)程使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python高效過(guò)濾出文件夾下指定文件名結(jié)尾的文件實(shí)例

    python高效過(guò)濾出文件夾下指定文件名結(jié)尾的文件實(shí)例

    今天小編就為大家分享一篇python高效過(guò)濾出文件夾下指定文件名結(jié)尾的文件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python實(shí)現(xiàn)自定義函數(shù)的5種常見(jiàn)形式分析

    Python實(shí)現(xiàn)自定義函數(shù)的5種常見(jiàn)形式分析

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義函數(shù)的5種常見(jiàn)形式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python自定義函數(shù)相關(guān)的參數(shù)、默認(rèn)值、隱函數(shù)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • python3如何將docx轉(zhuǎn)換成pdf文件

    python3如何將docx轉(zhuǎn)換成pdf文件

    這篇文章主要為大家詳細(xì)介紹了python3如何將docx轉(zhuǎn)換成pdf文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python的dataframe轉(zhuǎn)換為多維矩陣的方法

    python的dataframe轉(zhuǎn)換為多維矩陣的方法

    下面小編就為大家分享一篇python的dataframe轉(zhuǎn)換為多維矩陣的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 如何查看Python安裝了哪些包

    如何查看Python安裝了哪些包

    這篇文章主要給大家介紹了關(guān)于如何查看Python安裝了哪些包的相關(guān)資料, Conda是另一種廣泛使用的Python包管理工具,它用于安裝、管理和升級(jí)軟件包和其依賴(lài)項(xiàng),需要的朋友可以參考下
    2023-07-07
  • python3爬蟲(chóng)中多線程進(jìn)行解鎖操作實(shí)例

    python3爬蟲(chóng)中多線程進(jìn)行解鎖操作實(shí)例

    在本篇文章里小編給大家整理了關(guān)于python3爬蟲(chóng)中多線程進(jìn)行解鎖操作實(shí)例內(nèi)容,需要的朋友們可以參考下。
    2020-11-11
  • Python?ftfy?包的使用案例解析

    Python?ftfy?包的使用案例解析

    Unicode是一種字符編碼標(biāo)準(zhǔn),用于表示文本中的字符,通過(guò)安裝 ftfy 軟件包,可以在 Python 中使用它提供的函數(shù)和工具來(lái)處理和修復(fù)文本中的 Unicode 問(wèn)題,從而確保文本在各種應(yīng)用中的正確性和可靠性,這篇文章主要介紹了Python ftfy包的理解和使用,需要的朋友可以參考下
    2023-05-05
  • Python中基礎(chǔ)的socket編程實(shí)戰(zhàn)攻略

    Python中基礎(chǔ)的socket編程實(shí)戰(zhàn)攻略

    Python擁有內(nèi)置的socket模塊,可以用簡(jiǎn)潔明了的代碼來(lái)進(jìn)行socket通信操作,這里我們就為大家整理了一份Python中基礎(chǔ)的socket編程實(shí)戰(zhàn)攻略,需要的朋友可以參考下.
    2016-06-06

最新評(píng)論