การจัดการการตอบสนองสำหรับคำขอ HTTP
ในบทนี้เราจะลงรายละเอียดเพิ่มเติมเกี่ยวกับการตอบกลับที่ได้รับจากโมดูลคำขอ เราจะพูดถึงรายละเอียดต่อไปนี้ -
- รับการตอบสนอง
- การตอบสนอง JSON
- การตอบสนอง RAW
- การตอบสนองแบบไบนารี
รับการตอบสนอง
เราจะทำการร้องขอไปยัง URL โดยใช้เมธอด request.get ()
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users');
getdata มีวัตถุตอบสนอง มันมีรายละเอียดทั้งหมดของการตอบสนอง เราสามารถรับคำตอบได้ 2 วิธีโดยใช้ ( text ) และ (. content ) การใช้ response.text จะให้ข้อมูลกลับมาในรูปแบบข้อความดังที่แสดงด้านล่าง -
ตัวอย่าง
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"
}
},
]
คุณจะเห็นการตอบสนองเหมือนกันเช่นเดียวกับที่จะปรากฏในเบราว์เซอร์เมื่อคุณดูแหล่งที่มาของ URL ดังที่แสดงด้านล่าง -
คุณยังสามารถลองใช้. html URL และดูเนื้อหาโดยใช้ response.text ซึ่งจะเหมือนกับเนื้อหาที่มาของมุมมองสำหรับ URL. html ในเบราว์เซอร์
ตอนนี้ให้เราลอง response.content สำหรับ URL เดียวกันและดูผลลัพธ์
ตัวอย่าง
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
เอาต์พุต
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
การตอบสนองจะได้รับเป็นไบต์ คุณจะได้รับจดหมายbเมื่อเริ่มต้นการตอบกลับ ด้วยโมดูลคำขอคุณสามารถรับการเข้ารหัสที่ใช้และเปลี่ยนการเข้ารหัสได้หากจำเป็น ตัวอย่างเช่นในการรับการเข้ารหัสคุณสามารถใช้ response.encoding
print(getdata.encoding)
เอาต์พุต
utf-8
คุณสามารถเปลี่ยนการเข้ารหัสได้ดังนี้ - คุณสามารถใช้การเข้ารหัสที่คุณเลือกได้
getdata.encoding = 'ISO-8859-1'
การตอบสนอง JSON
คุณยังสามารถรับการตอบสนองสำหรับคำขอ Http ในรูปแบบ json โดยใช้วิธี response.json () ดังต่อไปนี้ -
ตัวอย่าง
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.json())
เอาต์พุต
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'}}]
การตอบสนอง RAW
ในกรณีที่คุณต้องการการตอบกลับดิบสำหรับ Http URL คุณสามารถใช้ response.raw เพิ่มได้ด้วย stream = True ภายในวิธีรับดังที่แสดงด้านล่าง -
ตัวอย่าง
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users', stream=True)
print(getdata.raw)
เอาต์พุต
E:\prequests>python makeRequest.py
<urllib3.response.HTTPResponse object at 0x000000A8833D7B70>
หากต้องการอ่านเนื้อหาเพิ่มเติมจากข้อมูลดิบคุณสามารถทำได้ดังนี้ -
print(getdata.raw.read(50))
เอาต์พุต
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'
การตอบสนองแบบไบนารี
ในการรับการตอบสนองแบบไบนารีเราสามารถใช้ response.content
ตัวอย่าง
import requests
getdata = requests.get('https://jsonplaceholder.typicode.com/users')
print(getdata.content)
เอาต์พุต
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
การตอบสนองจะได้รับเป็นไบต์ คุณจะได้รับจดหมายbเมื่อเริ่มต้นการตอบกลับ การตอบสนองแบบไบนารีส่วนใหญ่จะใช้สำหรับคำขอที่ไม่ใช่ข้อความ