This article mainly introduces examples of how to implement requests in Python to send/upload multiple files. It has a certain reference value. Now I share it with you. Friends in need can refer to it
1. Required environment
Python2.X
Requests library
2. Single field sending a single file
There is only one interface for sending files in requests, which is to use the files parameter of requests.post. The request form is as follows:
url = "http://httpbin.org/post" data = None files = { ... } r = requests.post(url, data, files=files)
This files parameter can accept many forms of data. The two most basic forms are:
Dictionary type
Tuple list type
2.1 , Dictionary type files parameter
The officially recommended dictionary parameter format is as follows:
{ "field1" : ("filename1", open("filePath1", "rb")), "field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"), "field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}) }
The key of this dictionary is to send a post The field name when requesting, and the value of the dictionary describes the information of the file to be sent; as can be seen from the above, the value can be a 2-tuple, 3-tuple or 4-tuple;
of this tuple The meaning of each field is:
("filename", "fileobject", "content-type", "headers")
By default, the default value
In addition to the above usage form, in fact, requests It still supports a more concise parameter form, as follows
{ "field1" : open("filePath1", "rb")), "field2" : open("filePath2", "rb")), "field3" : open("filePath3", "rb")) }
The equivalent effect of this form of parameter is as follows, where filename is the file name of filepath:
{ "field1" : ("filename1", open("filePath1", "rb")), "field2" : ("filename2", open("filePath2", "rb")), "field3" : ("filename3", open("filePath3", "rb")) }
Of course, you can also send a file request like this
{ "field1" : open("filePath1", "rb").read()) }
The value of filename here For field1
2.2, files parameter of tuple list type
In fact, the form of tuple list is basically the same as that of dictionary, except for the outermost packaging. ; And inside requests, the dictionary parameter form will eventually be converted into a tuple column form. The usage recommended by the official website is as follows:
[ ("field1" : ("filename1", open("filePath1", "rb"))), ["field2" : ("filename2", open("filePath2", "rb"), "image/jpeg")], ("field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})) ]
The sub-items in the list can be tuples or lists; the form of introduction is also supported here, as follows:
[ ("field1" : open("filePath1", "rb"))), ##filename 使用的是filepath的文件名 ("field2" : open("filePath2", "rb").read())) ##filename 使用的是键值,即 field2 ]
3. Send multiple files in a single field [that is, when uploading files, set it to multiple selection]
3.1. Dictionary parameter format
{ "field1" : [ ("filename1", open("filePath1", "rb")), ("filename2", open("filePath2", "rb"), "image/png"), open("filePath3", "rb"), open("filePath4", "rb").read() ] }
3.2. Tuple list format
[ ("field1" , ("filename1", open("filePath1", "rb"))), ("field1" , ("filename2", open("filePath2", "rb"), "image/png")), ("field1" , open("filePath3", "rb")), ("field1" , open("filePath4", "rb").read()) ]
For requests sent in the above two forms, all files will be under the same field. The background service can obtain all file objects from the field1 field
4. Send common data fields at the same time
#The above describes the use of sending file content requests, and sometimes we also send files while sending It is necessary to send ordinary data fields. At this time, the ordinary data fields can be directly stored in the data parameter, as follows:
data = {"k1" : "v1"} files = { "field1" : open("1.png", "rb") } r = requests.post("http://httpbin.org/post", data, files=files)
Related recommendations:
Python implements a super simple video object extraction function
Python implements an example of pinging a specified IP
The above is the detailed content of Example of python implementing requests to send/upload multiple files. For more information, please follow other related articles on the PHP Chinese website!