Xử lý phản hồi cho các yêu cầu HTTP
Trong chương này, chúng ta sẽ đi vào chi tiết hơn về phản hồi nhận được từ mô-đun yêu cầu. Chúng ta sẽ thảo luận các chi tiết sau:
- Nhận phản hồi
- Phản hồi JSON
- Phản hồi RAW
- Phản hồi nhị phân
Nhận phản hồi
Chúng tôi sẽ yêu cầu URL bằng phương thức request.get ().
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users');
Getdata có đối tượng phản hồi. Nó có tất cả các chi tiết của phản ứng. Chúng tôi có thể nhận được phản hồi theo 2 cách sử dụng ( văn bản ) và (. Nội dung ). Sử dụng response.text sẽ cung cấp cho bạn dữ liệu trở lại ở định dạng văn bản như hình dưới đây -
Thí dụ
E:\prequests>python makeRequest.py
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
]
Bạn sẽ thấy phản hồi giống như cách nó sẽ xuất hiện trong trình duyệt khi bạn xem nguồn cho URL như được hiển thị bên dưới -
Bạn cũng có thể thử URL .html và xem nội dung bằng cách sử dụng response.text, nó sẽ giống như nội dung nguồn xem cho URL .html trong trình duyệt.
Bây giờ, chúng ta hãy thử response.content cho cùng một URL và xem kết quả.
Thí dụ
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
Đầu ra
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website": "hild
egard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n
"username": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-Crist",
\n "catchPhrase": "Proactive didactic contingency",\n "bs":
"synergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name":
"Clementine Bauch",\n "username": "Samantha",\n "email":
"[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "ge
o": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n
Phản hồi được tính bằng byte. Bạn sẽ nhận được một lá thưbkhi bắt đầu phản hồi. Với mô-đun yêu cầu, bạn có thể sử dụng mã hóa và cũng có thể thay đổi mã hóa nếu cần. Ví dụ: để nhận mã hóa, bạn có thể sử dụng response.encoding.
print(getdata.encoding)
Đầu ra
utf-8
Bạn có thể thay đổi kiểu mã hóa như sau - Bạn có thể sử dụng kiểu mã hóa mà bạn chọn.
getdata.encoding = 'ISO-8859-1'
Phản hồi JSON
Bạn cũng có thể nhận được phản hồi cho yêu cầu Http ở định dạng json bằng cách sử dụng phương thức response.json () như sau:
Thí dụ
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.json())
Đầu ra
E:\prequests>python makeRequest.py
[{'id': 1, 'name': 'Leanne Graham', 'username': 'Bret', 'email': 'Sincere@april.
biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough',
'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}},
'
phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name':
'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs':
'harness real-time e-markets'}}]
Phản hồi RAW
Trong trường hợp bạn cần phản hồi thô cho URL Http, bạn có thể sử dụng response.raw, đồng thời thêm stream = True bên trong phương thức get như được hiển thị bên dưới:
Thí dụ
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.raw)
Đầu ra
E:\prequests>python makeRequest.py
<urllib3.response.HTTPResponse object at 0x000000A8833D7B70>
Để đọc thêm nội dung từ dữ liệu thô, bạn có thể làm như sau:
print(getdata.raw.read(50))
Đầu ra
E:\prequests>python makeRequest.py
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x95\x98[o\xe38\x12\x85\xdf\xe7W\x10y\
xda\x01F\x82.\xd4m\x9f\xdc\x9dd\xba\xb7\x93\xf4\x06q\xef4\x06\x83A@K\x15\x89m'
Phản hồi nhị phân
Để nhận được phản hồi nhị phân, chúng ta có thể sử dụng response.content.
Thí dụ
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
Đầu ra
E:\prequests>python makeRequest.py
b'[\n {\n "id": 1,\n "name": "Leanne Graham",\n "username": "Bret",\n
"email": "[email protected]",\n "address": {\n "street": "Kulas Light
",\n "suite": "Apt. 556",\n "city": "Gwenborough",\n "zipcode": "
92998-3874",\n "geo": {\n "lat": "-37.3159",\n "lng": "81.149
6"\n }\n },\n "phone": "1-770-736-8031 x56442",\n "website":
"hildegard.org",\n "company": {\n "name": "Romaguera-Crona",\n "catchPhr
ase": "Multi-layered client-server neural-net",\n "bs": "harness real-time
e-markets"\n }\n },\n {\n "id": 2,\n "name": "Ervin Howell",\n "us
ername": "Antonette",\n "email": "[email protected]",\n "address": {\n
"street": "Victor Plains",\n "suite": "Suite 879",\n "city": "Wisoky
burgh",\n "zipcode": "90566-7771",\n "geo": {\n "lat": "-43.950
9",\n "lng": "-34.4618"\n }\n },\n "phone": "010-692-6593 x091
25",\n "website": "anastasia.net",\n "company": {\n "name": "Deckow-Crist",
\n "catchPhrase": "Proactive didactic contingency",\n "bs": "syn
ergize scalable supply-chains"\n }\n },\n {\n "id": 3,\n "name":
"Clementine Bauch",\n "username": "Samantha",\n "email": "[email protected]",
\n "address": {\n "street": "Douglas Extension",\n "suite": "Suite
847",\n "city": "McKenziehaven",\n "zipcode": "59590-4157",\n "
geo": {\n "lat": "-68.6102",\n "lng": "-47.0653"\n }\n },\n
Phản hồi được tính bằng byte. Bạn sẽ nhận được một lá thưbkhi bắt đầu phản hồi. Phản hồi nhị phân chủ yếu được sử dụng cho các yêu cầu không phải văn bản.