Làm việc với các Forms và yêu cầu POST (tiếp tục)
Như một ví dụ, xem xét một HTTP POST request với một vài dữ liệu request bao gồm:
POST /postform2/ HTTP/1.1
Host: www.webscrapingfordatascience.com
Content-Type: application/x-www-form-urlencoded
[… Other headers]
name=Seppe&gender=M&pizza=like
Bây giờ xem xét một HTTP POST request với dữ liệu request được mã hóa sử dụng “multipart/form-data”:
POST /postform2/ HTTP/1.1
Host: www.webscrapingfordatascience.com
Content-Type: multipart/form-data; boundary=BOUNDARY
[… Other headers]
–BOUNDARY
Content-Disposition: form-data; name=”name”
Seppe
–BOUNDARY
Content-Disposition: form-data; name=”gender”
M
–BOUNDARY
Content-Disposition: form-data; name=”pizza”
like
–BOUNDARY
Content-Disposition: form-data; name=”profile_picture”; filename=”me.jpg”
Content-Type: application/octet-stream
[… binary contents of me.jpg]
Hoàn toàn thì, request body ở đây trông phức tạp hơn, mặc dù chúng ta có thể thấy nơi multipart” moniker đến từ:
dữ liệu request được chia tách trong nhiều phần sử dụng một chuỗi “boundary”, cái được quyết định (tùy biến trong
hầu hết trường hợp) bởi cái khởi động request. May mắn cho chúng ta, chúng ta không cần quan tâm quá nhiều về cái
này khi sử dụng requests. Để upload một file, chúng ta đơn giản sử dụng đối số khác, tên files (cái có thể được sử
dụng cùng với đối số data).
import requests
url = ‘http://www.webscrapingfordatascience.com/postform2/’
formdata = {‘name’: ‘Seppe’}
filedata = {‘profile_picture’: open(‘me.jpg’, ‘rb’)}
r = requests.post(url, data=formdata, files=filedata)
Thư viện sẽ quan tâm thiết lập các headers phù hợp trong POST request (bao gồm nhặt một boundary) cũng như mã hóa
request body đúng đắn cho bạn.