在这种情况下,最好使用files关键字发送文件数据,如下所示:
import requests
def send_pdf_data(filename_list, encoded_pdf_data):
files = {}
for (filename, encoded, index) in zip(filename_list, encoded_pdf_data, range(len(filename_list))):
files[f"pdf_name_[index].pdf"] = (filename, open(filename, 'rb'), 'application/pdf')
data = {}
# *Put whatever you want in data dict*
requests.post("http://yourserveradders", data=data, files=files)
def main():
filename_list = ["pdf_name_1.pdf", "pdf_name_2.pdf"]
pdf_blob_data = [open(filename, 'wb').read() for filename
in filename_list]
if __name__ == '__main__':
main()
但是,如果您真的想将数据作为 json 传递,您应该使用 @Mark Ransom 提到的 base-64 模块。
您可以通过以下方式实现它:
import requests
import json
import base64
def encode(data: bytes):
"""
Return base-64 encoded value of binary data.
"""
return base64.b64encode(data)
def decode(data: str):
"""
Return decoded value of a base-64 encoded string.
"""
return base64.b64decode(data.encode())
def get_pdf_data(filename):
"""
Open pdf file in binary mode,
return a string encoded in base-64.
"""
with open(filename, 'rb') as file:
return encode(file.read())
def send_pdf_data(filename_list, encoded_pdf_data):
data = {}
# *Put whatever you want in data dict*
# Create content dict.
content = [dict([("name", filename), ("data", pdf_data)])
for (filename, data) in zip(filename_list, encoded_pdf_data)]
data["content"] = content
data = json.dumps(data) # Convert it to json.
requests.post("http://yourserveradders", data=data)
def main():
filename_list = ["pdf_name_1.pdf", "pdf_name_2.pdf"]
pdf_blob_data = [get_pdf_data(filename) for filename
in filename_list]
if __name__ == '__main__':
main()