B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 1
LẬP TRÌNH PYTHON NG CAO
TÀI LI U PH C V SINH VIÊN NGÀNH KHOA H C D U LI
Nhóm biên so n: nh Khƣu Minh Cả Hunh Thái H c
TP.HCM - Năm 2021
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 2
M C L C
BÀI 8: L P TRÌNH D U M NG INTERNET LI ....................................................................................................... 3
1. D u Internet và mô hình Request/Response li ........................................................................................................ 3
1.1. HTTP .................................................................................................................................................................. 3
1.2. HTTP Message ................................................................................................................................................... 4
1.2.1. HTTP Request ................................................................................................................................................ 4
1.2.2. HTTP Response ............................................................................................................................................. 5
2. n urllib trong python Thƣ việ ..................................................................................................................................... 6
2.1. urllib request ............................................................................................................................................................. 6
2.1.1. urlopen 6 ..............................................................................................................................................................
2.1.2. urllib.parse ........................................................................................................................................................ 7
2.2. lý ngo i l X ............................................................................................................................................................ 8
3. Rest API và Webservice ........................................................................................................................................... 9
3.1. n trúc c a REST Kiế .................................................................................................................................................. 9
3.2. REST APIs and Web Services ................................................................................................................................ 10
3.3. REST và Python ...................................................................................................................................................... 10
3.3.1. Phƣơng thức GET ........................................................................................................................................... 11
3.3.2. Phƣơng thức POST ......................................................................................................................................... 11
3.3.3. Các phƣơng thức khác..................................................................................................................................... 12
3.3.4. API Key .......................................................................................................................................................... 12
3.4. JSON ....................................................................................................................................................................... 13
BÀI TẬP CHƢƠNG 8 .................................................................................................................................................... 16
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 3
B LÀI 8: P TRÌNH D LIU M NG INTERNET
M c tiêu:
- Nm v n l nh. ững được Python để viết các đoạ
- Hiểu đượ và địc khái nim API nh dng d liu JSON/XML.
- S d c gói request, urllib c hi n các tác v ụng đượ để th truy v n d li u Internet.
N i dung chính:
1. D u Internet và mô hình Request/Response li
1.1. HTTP
HTTP (Hyper-Text-Transfer-Protocol) m t giao c m ng d ng cho các h ng phân ph th c th i,
cộng tác, đa phƣơng tiệ . Nó đƣợn c thiết kế bi Tim Berners Lee (1989). Giao thc này d a trên giao
thc TCP/IP n t c World-Wide Web (WWW) s d ng t , cho phép . Đây nề ảng đã đƣợ năm 1990
t i (fetching) các ngu n tài nguyên trên m u HTML, text, video, nh. ạng nhƣ tài liệ
cũng n n t ng cho b t k i d c th c hi n trên Web v i hình trao đổ liệu nào đƣợ
Client/Server. Các yêu c u (Request/HTTP Request) t c g client đƣợ ửi đến Server, sau đó Server x
lý yêu c u và g i l i (Response/HTTP Response) d n client. Các Request và Response là các liệu đế
Message (HTTP Message).
Stateless: HTTP là giao th c phi tr ng thái (stateless), không có m i liên h nào gi a hai yêu c u
(request) đƣợ c g , thửi đi c hin trên cùng m t kết n n cùng 1 server). Thí dối (đế , client,
thông qua web browser (nhƣ chrome/firefore) g ầu đếi yêu c n https://www.vanlanguni.edu.vn/dao-
tao/nganh tao-dao- , ti p t c th g i m t yêu c n ế ầu khác đế
https://www.vanlanguni.edu.vn/trang-chu/lich-su, c hai yêu c u này không m i liên h v i
nhau.
Cookie: t Đôi khi mộ ng d ng c n chia s trng thái gi a nh ng yêu c u c a phiên m vi c
(session). Chng h n trong ng d i dùng thêm 1 s n ph m vào gi ụng bán hàng online, ngƣờ ỏ. Sau đó,
quay l m ki m thêm s n ph m khác vào gi . Do HTTP stateless, nên HTTP ại trang chính để ế
Cookie s h nh m duy trì tr ng thái c hai phiên làm vi c trên. Ph c thêm tr a ần Cookie y đƣợ
vào ph n header c a HTTP Message.
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 4
1.2. HTTP Message
Thông điệp HTTP (HTTP Message) c trao i qua l i gi a Client Server. Trong thông tin đƣợ đổ
đó, HTTP Request Message thông điệ Client đến Server, và ngƣp gi t c li HTTP Response
Message.
Phiên b n HTTP/1.1 c a HTTP Message c chu n giao đƣợ ẩn hóa vào m 1997, đây phiên b
thc HTTP m nh trong các trình duy .0 ặc đị ệt. Trong khi đó, HTTP/2 chuẩn hóa m 2015 phiên
b n c i ti n ti p theo. N u Server h HTTP/2.0 thì các trình duy t s t ng s d ng phiên b ế ế ế tr độ n
HTTP/2.0.
1.2.1. HTTP Request
HTTP Request thông báo yêu c u t máy khách g n máy . N i dung thông báo bao g m: i đế ch
Request Line, Request Header và Request Body (tùy ch n).
Request Line:
o Tên phƣơng thức: GET, POST, PUT, DELETE
o URL: là địa ch đị nh danh tài nguyên
o HTTP version: phiên bn c HTTP/1.0, HTTP/1.1) a giao th c HTTP (ví d
Request Header: cho phép client g i thêm các thông tin b i HTTP sung đính kèm vớ
Request, M ng thông d t s trƣ ụng nhƣ:
o Accept lo i n i dung th nh c t p response (ví d : text/plain, ận đƣợ thông điệ
text/html…)
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 5
o Accept-Encoding: các ki c ch p nh n (ví d gzip, deflate) ểu nén đƣợ
o Connection: tùy ch u khi n cho k n th i. Ví d : keepalive, ọn điề ết ni hi Upgrade…
o Cookie: thông tin HTTP Cookie t server
o User-Agent: thông tin v user agent c ủa ngƣi dùng
Request Body (tùy ch n): Các yêu c u tìm n p tài nguyên, nh ƣ GET, HEAD, DELETE hoặc
OPTIONS, thƣờng không cn Request Body.
1.2.2. HTTP Response
HTTP Response cũng là một HTTP Message, nên nó cũng có cấu trúc tƣơng tự vi HTTP Resquest,
g m các thành ph Response Line, Response Response Body. n Header và
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 6
Response Line có cấu trúc nhƣ sau:
HTTP-version Status Reason Phrase Code
H -version TTP
Phiên b n HTTP, thông d ng nh t là HTTP/1.1
Status Code
Mã ph n h i do máy ch g i v . Ví d : 200, 301, 50
Reason Phrase
Gi i thích ng n g n v mã ph n h i
2. n urllib trong python Thƣ việ
Module urllib trong Python 3 cho phép ngƣ ập trình đểi l truy cp các trang web. Thông qua urllib,
ngƣờ i phát trin ng d ng th truy cp các trang web, ti xu ng d liu, phân tích pháp d
liu, s và th n bửa đổi tiêu đề c hi t k yêu c u GET và POST nào mà h có th c n th n. c hi Dƣới
đây là bảng lit kê mt s package ca module urllib.
Modules
Mô t
urllib.request
m c và đọ
urllib.parse
phân tích cú pháp URL
urllib.error
cho các trƣ ng h p ngo i l c nêu ra đƣợ
urllib.robotparser
phân tích cú pháp t p robot.txt
Cài đặt urllib:
pip install urllib
2.1. urllib request
2.1.1. urlopen
urlopen dùng để ột đối tƣợ . Trƣờ m m ng mng thông qua chui URL ng hp kết ni thành công, mt
đối tƣơng giống nhƣ tập tin s đƣợc tr v, nếu kết ni không th đƣợc thc hin, ngoi l IOError
đƣợc đƣa ra. Đôi tƣợ các phƣơng thứng tr v h tr c sau: read (), readline (), readlines (), fileno (),
close (), info (), getcode () và geturl ().
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 7
Thí d 1:
Thí d 2 : Sinh viên hãy phát tri n trên thí d 1 b ng cách s d ng các m info(), getcode()
geturl i k và gi ng hàm. (), sau đó ghi lạ ết qu ải thích ý nghĩa của t
2.1.2. u parse rllib.
Gi s chúng ta mu n tìm ki trang web , chúng ta có th vào ếm thông tin „basic‟ từ www.python.org
trang đó từ openurl Seach, vào trong m c tìm ki m, r i nh n vào nút ế khi đó địa ch trang
d ng là https://www.python.org/search/?q=urlopen&submit=Search hình minh h(xem ọa dƣới đây).
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 8
Khi đó để ế ế l i dung cấy đƣợc n a k t qu m ki m, ta xem thí d 2 dƣới đây:
Thí d 2:
Bên c chúng ta th s d n thay th , hãy xem thí dạnh đó, ụng thƣ việ url parselib. để ế 3 dƣới đây
(kết qu thí d thí d 2) 3 hoàn toàn tƣơng tự
Thí d 3:
2.2. X lý ngo i l
urlopen có th y ra ngo i l ng h p máy ch t a ch url không (exception) URLError trong trƣ ại đị
ph n h i k t qu i phát tri n ng d ng nên n m b t x các ngo i l này. Xem thí ế ả. Khi đó, ngƣ
d 4 và 5 dƣới đây.
Thí d 4:
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 9
Thí d 5:
3. và Webservice Rest API
3.1. n trúc c a REST Kiế
REST (representational state tranfer) m t d ng ki n trúc ph n m nh u cho giao ti ế ềm xác đị ki ếp
gi a client server thông qua m ng. REST cung c p m t t p các ràng bu c cho ki n trúc ph ế n
m y hi u su r tin c y trong h ng. ềm để thúc đẩ t, kh năng mở ộng, tính đơn giản và độ th
REST định nghĩa các ràng buộc sau:
Stateless: Máy ch không duy trì b ng thái nào gi a các yêu c u t y khách. t c tr
Client-Server: Máy ch và máy khách ph i phát tri c l p v i nhau. ển độ
Cacheable: D liệu đƣợ ải đƣc truy xut t máy ch ph c máy khách hoc y ch lƣu vào
b nh cache.
Uniform interface: Máy ch s cung c p m t giao di n th ng nh truy c p tài nguyên mà t đ
không c i di n c a chúng. ần xác định đạ
Layered system: Máy khách th truy c p tài nguyên trên y ch m t cách gián ti ếp
thông qua các tầng khác nhau nhƣ proxy hoặc load balancer
i
.
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 10
Code on demand (tùy chn): Máy có th chuych n mã ngu n máy khách mà nó có th ồn đế
chy, ch ng h ng d ng m ạn nhƣ JavaScript cho t trang.
3.2. REST APIs and Web Services
Web REST b t k webservice nào tuân theo các ràng bu c v ki n trúc REST. Các service ế
webservice y hi n th d u c a h v i th i bên ngoài thông qua m t API (Application li ế gi
Programming Interface). API m t t p h p các công c cho phép các ng d ng khác nhau ơng
tác. M t s tên tu i l n nh p các API ất trên web (nhƣ Reddit, Spotify, Twitter và Facebook) cung c
miễn phí để cung cp d liu có giá tr trên máy ch ca h. Hc cách làm vic vi API s chu n b
cho b nm vi c trong vi c truy xu tphân tích d t o ra thông tin chi ti liệu để ết giúp đƣa ra
các d . đoán có giá trị
Các API REST l bi t các thao ắng nghe các phƣơng thức HTTP nhƣ GET, POST và DELETE để ế
tác nào c n th c hi n trên tài nguyên c web service. Tài nguyên là b t k a d u nào có s n trong li
webservice th c truy c p thao tác v i các yêu c u HTTP t đƣợ ới API REST. Phƣơng thức
HTTP cho API biết hành động nào cn thc hin trên tài nguyên.
HTTP method
Description
GET
Retrieve an existing resource.
POST
Create a new resource.
PUT
Update an existing resource.
PATCH
Partially update an existing resource.
DELETE
Delete a resource.
API Endpoints API REST hi n th m t t p h p các URL công khai các ng d ng khách s
d truy c p các tài nguyên c a web service. Các URL này, trong ng c nh c a mụng để ột API, đƣợc
g i là Endpoint
3.3. REST và Python
Để l i REST API, nhập trình tƣơng tác vớ ng nhà phát trin Python th s d gụng requests để i
HTTP requests. Nó là m p phép c t b ng Python.ột thƣ viện HTTP đƣc c ủa Apache2, đƣợc viế
Cài đặ thƣ việt n requests:
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 11
pip install requests
3.3.1. Phƣơng thức GET
GET m t trong s c HTTP ph bi i l p trình s d ng khi làm vi c v các phƣơng thứ ến ngƣờ i
REST API. Phƣơng thứ ột API cho trƣớc này ch cho phép truy xut tài nguyên t m c, không cho
phép thay đổi hoc chnh sa tài nguyên. Ngƣờ i lp trình th s d ng dch v gi
JSONPlaceholder (https://jsonplaceholder.typicode.com) để ki m tra GET.
Thí d 6 :
Đoạ n mã này g gọi request.get () để i yêu c u GET t i /todos/1, yêu c u này s ph n h mi vi c
todo vi ID 1. Trong thí d y, d u tr v nh d ng JSON. li có đị
Câu hi: làm sao để có th xem cheaders a response tr v:
3.3.2. Phƣơng thức POST
POST m c khác c t o/thêm ngu n tài ột phƣơng thứ ủa HTTP. Phƣơng thức này đƣợc dùng để
nguyên m i t a ch nh. ng h p mã tr ng thái (status code) tr ại đị tài nguyên (URI) đã đƣc ch đị Trƣ
v c t ng h thông t o tài nguyên, giá tr là 201, nghĩa là tài nguyên mới đƣợ ạo; trƣờ ợp không đủ tin để
trng thái s ng h t (Conflict), tr ng thái s có giá là 400 (Bad Request). Trong trƣ ợpxung độ
tr là 409. Trƣ ng hp mã trng thái tr v là 200, nghĩa là tài nguyên mới đƣ c thêm vào.
Thí d 7:
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 12
Thí d trên g t o m i m t todo trong h c tiên, khai báo t n i requests.post() để thng. Trƣớ điể
todo. Sau đó, gán todo vào tham số json, thao tác y s đƣợc requests.post() t động thiết lp
Content-Type c a headers application/json ( headers = {“Content-Type”: “application/json”}.
th làm theo thao tác th 8 công nhƣ thí dụ ới đây:
Thí d 8:
Ghi chú: . json.dumps() là hàm thuộc gói json có trong thƣ viện chuẩn Gói thƣ viện này cung cấp các
phƣơng pháp hữu ích để làm việc JSON trong Python.
3.3.3. khác Các phƣơng thc
Bên c nh GET POST, requests còn cung c ấp các phƣơng thức khác nhƣ PUT, PATCH
DELETE. Sinh viên có th t tìm hi c này. ểu thêm các phƣơng thứ
3.3.4. API Key
Khóa API là m t giá tr duy nh c ch i dùng s d ng các d ch v . B ng cách xem ất đƣợ định cho ngƣờ
khóa đƣợc cung cp theo yêu c u, d ch v s ki m tra tính h p l c c khi c p c không ủa khóa trƣ ho
quy n i dùng truy c p s d ng d ch v cho ngƣờ có liên quan.
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 13
Thí d 9:
Lƣu ý:
1. Sinh viên th tham kh ng d n t ng link ảo hƣớ ại đƣờ https://blog.hubspot.com/website/how-
to-get-youtube- -keyapi l y API_KEY. để
2. Xem cách g i API thông qua HTTPBasicAuth t i link https://realpython.com/python-
requests/
3.4. JSON
JSON J S O ( ava cript bject Notation) nh d ng d u theo c p key value. H u h t các ngôn ng là đị li ế
l p trình hi u d dàng c nh d ng này. JSON m nh d g i nh ện nay đề đọc đƣợ loại đị ột đị ạng để n
d u thông qua API. nh d ng y hóa danh sách t li Đị các cấu trúc nhƣ (list) điển
(dictionary) thành chu m b o các ng d ng có th d ỗi để đả dàng đọc đƣc.
Thí d 10:
{'kind': 'Response', 'items': [{'id': '7cmvABXyUC0', 'statistics':
{'viewCount': '784', 'commentCount': '2'}}], 'pageInfo': {'totalResults': 1,
'resultsPerPage': 1}}
Python h x c chính g tr lý JSON thông qua thƣ viện json. Thƣ viện này có hai phƣơng thứ m:
dumps: chuy ng thành chu ển đối tƣợ i.
loads: chuy n chu ng ỗi JSON thành đối tƣợ
Thí d : S d chuy n (dumps) list thành chu i (loads) 11 ụng JSON để ỗi và ngƣợc l
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 14
Thí d : S d chuy n (dumps) t n thành chu i (loads) 12 ụng JSON để điể ỗi và ngƣợc l
Tài li u tham kh o:
1. https://www.oreilly.com/library/view/restful- -web
services/9780596529260/ch09.html#id392478
2. https://medium.com/geekculture/http- -request-response-cycle-ddcb5bb70707the
3. https://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf
4. https://xuanthulab.net/giao- -http-va-cau-truc- -ban-cua-http-message.htmlthuc co
5. https://docs.microsoft.com/en-
us/dotnet/api/system.net.http.httprequestmessage.version?view=net-5.0
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 15
6. https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
7. https://www.geeksforgeeks.org/python-urllib-module/
8. https://medium.com/geekculture/http- -request-response-cycle-ddcb5bb70707the
9. https://realpython.com/api- -python/integration in-
10. https://blog.hubspot.com/website/how- -get-youtube- -keyto api
11. https://docs.python-requests.org/en/master/user/quickstart/#make-a-request
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 16
BÀI T 8 ẬP CHƢƠNG
[Yêu c u sinh viên n p bài]
Bài t p 1: Sinh viên hãy hoàn thành thí d 1 b ng cách b t qu sung vào đoạn chƣơng trình để lƣu kế
hi n th trong t nh d ng html, x ngo i l y nh ập tin đị URLError HTTPError, n
xét k nhìn th ết qu ấy đƣợc.
Bài tp 2: Sinh viên y cho bi t k qu c a câu l sinh viên nh n xét v k t qu ế ết ệnh sau đây, ế
này
x = urllib.request.urlopen('https://www.google.com/search?q=test')
Bài t p 3: Sinh viên hãy quan sát hai cách truy v n d u t li trang http://python.org dƣới đây, so
sánh và nhn xét
Cách 1:
import urllib.request
url_google = urllib.request.urlopen( ) 'http://python.org/'
html = url_google.read()
Cách 2:
import urllib.request
with urllib.request urlopen(. 'http://python.org/') response: as
html response = .read()
Bài t p 4: binary_framing2.png Đoạn code ới đây dùng đ lƣu trữ nh ( ) l y t a ch đị
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages/binary_framing2.png, sinh viên
hãy phát trin đoạn script y đ lƣu hế ại đị th t toàn b các nh t a ch
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages/.
import urllib.request
urllib.request.urlretrieve("https://developer.mozilla.org/en-
US/docs/Web/HTTP/Messages/binary_framing2.png", "binary_framing2.png ")
Gi ý: Sinh viên s d ng bi u th c regular-expession phân tích l y url ch nh. (thƣ viện re) để a
Bài t p 5: Đoạn chƣơng trình dƣới đây đc d liu t địa ch 'http://sixty-north.com/c/t.txt'kết
qu n th lƣu vào trong danh sách lstStory. Sinh viên y phát triể đoạn chƣơng trình này để lƣu
toàn b d liệu đọc đƣợc với định d ng t ập tin lƣu trữ csv.
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 17
from import urllib.request urlopen
with urlopen('http://sixty-north.com/c/t.txt') as story:
lstStory = story.readlines()
print(lstStory[0])
print('done')
Bài t p 6: Đoạn ới đây gọi api đ để l y k t qu ế tr v t iss-pass.json v i tham s „lat‟
37.78 và „lon‟ là -122.41. K t qu v l y giá tr ế tr nhƣ hình dƣới đây. Sinh viên hãy bổ sung đoạn mã để
duration c a ph n t u tiên. đầ
Bài t p 7: Sinh viên hãy ng d n t o m i trang 13, phát tri n thí dxem hƣớ API KEY ục lƣu ý t 9
trong bài (trang 12) để truy vn tp các videos vi video = [7cmvABXyUC0, 9eH-7x7swEM, id
JndzGxbwvG0, l0P5_E6J_g0] t qu thành t p tin csv g m nhlƣu kế ng thông tin nhƣ bảng dƣới
đây:
viewCount
likeCount
dislikeCount
favoriteCount
commentCount
G i ý:
1. Khai báo t p ng k t qu , t p items này g m nhi u ph n t , m i ph n t là m t t p h items để lƣu bả ế p
g m (videoid, viewCount, likeCount, dislikeCount, favoriteCount, commentCount).
2. d n pandas t k t qu ( nh d ng S ụng DataFrame trong thƣ việ , và hàm to_csv đ xu ế items) sang file đị
csv . nhƣ gợi ý dƣới đây
import as pandas pd
fields = ['videoid' 'viewCount' 'likeCount' 'dislikeCount' 'favoriteCount' 'comment, , , , ,
Count']
summaryResults = pd.DataFrame(items, columns = fields)
summaryResults.to_csv('path/filename.csv')
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 18
Ph l c: Nhng Status Code thông d ng
Code
Status
Ý nghĩa
2xx Success
200
OK
Standard response for successful HTTP requests. The actual res
will depend on the request method used. a GET requestIn
response will contain entity corresponding the requean to
resource. a POST request, the response will contain eIn an
describing or containing the result of the action.
201
Created
The request has been fulfilled, resulting the creation of a in
resource.
204
No Content
The server successfully processed the request and not returninis
content.
206
Partial Content
The server delivering only part of the resource (byte serving) is
to is a range header sent the client. The range header by us
HTTP clients enable resuming of interrupted downloads, or spto
download into multiple simultaneous streams.
3xx Redirection
301
Moved
Permanently
This and all future requests should be directed the given URI.. to
302
Found
The HTTP/1.0 specification (RFC 1945) required the client
perform a temporary redirect (the original describing phrase
"Moved Temporarily")
303
See Other
The response the request be found under another URI usto can
GET method. When received response a POST in to
PUT/DELETE), the client should presume that the server
received the data and should issue a redirect with a separate
message.
4xx Client errors
B môn Khoa h c D u li
Thc hành Lp trình Python nâng cao Trang 19
400
Bad Request
The server cannot or will not process the request due appto an
client error (e.g., malformed request syntax, size too large, inv
request message framing, or deceptive request routing).
401
Unauthorized
Similar 403 Forbidden, but specifically for use whto
authentication required and has failed or has not yet been provis
The response must include a W-Authenticate header fWW
containing a challenge applicable the requested resource. to
403
Forbidden
The request was valid, but the server refusing action. The is
might not have the necessary permissions for a resource, or may
an account of some sort.
404
Not Found
The requested resource could not be found but may availabbe
the future. Subsequent requests by the client are permissible.
429
Too Many
Requests
The user has sent too many requests a given amount of time. in
5xx Server errors
500
Internal Server
Error
A generic error message, given when unexpected conditionan
encountered and no more specific message suitable. is
502
Bad Gateway
The server was acting a gateway or proxy and received inas an
response from the upstream server
503
Service
Unavailable
The server currently unavailable (because overloaded or dis it is
for maintenance). Generally, this a temporary state. is
i
hps://en.wikipedia.org/wiki/Load_balancing_(compung)

Preview text:

Bộ môn Khoa học Dữ liệu LẬP TRÌNH PYTHON NÂNG CAO
TÀI LIU PHC V SINH VIÊN NGÀNH KHOA HC D LIU
Nhóm biên soạn: Khƣu Minh Cảnh – Huỳnh Thái H c ọ TP.HCM - Năm 2021
Thực hành Lập trình Python nâng cao Trang 1
Bộ môn Khoa học Dữ liệu MC LC
BÀI 8: LẬP TRÌNH DỮ LIỆU MẠNG INTERNET ....................................................................................................... 3
1. Dữ liệu Internet và mô hình Request/Response ........................................................................................................ 3 1.1.
HTTP .................................................................................................................................................................. 3 1.2.
HTTP Message ................................................................................................................................................... 4 1.2.1.
HTTP Request ................................................................................................................................................ 4 1.2.2.
HTTP Response ............................................................................................................................................. 5
2. Thƣ viện url ib trong python ..................................................................................................................................... 6
2.1. url ib request ............................................................................................................................................................. 6 2.1.1.
urlopen ............................................................................................................................................................. .6 2.1.2.
url ib.parse ........................................................................................................................................................ 7
2.2. Xử lý ngoại lệ ............................................................................................................................................................ 8
3. Rest API và Webservice ........................................................................................................................................... 9
3.1. Kiến trúc của REST .................................................................................................................................................. 9
3.2. REST APIs and Web Services ................................................................................................................................ 10
3.3. REST và Python ...................................................................................................................................................... 10 3.3.1.
Phƣơng thức GET ........................................................................................................................................... 11 3.3.2.
Phƣơng thức POST ......................................................................................................................................... 11 3.3.3.
Các phƣơng thức khác..................................................................................................................................... 12 3.3.4.
API Key .......................................................................................................................................................... 12
3.4. JSON ....................................................................................................................................................................... 13
BÀI TẬP CHƢƠNG 8 .................................................................................................................................................... 16
Thực hành Lập trình Python nâng cao Trang 2
Bộ môn Khoa học Dữ liệu BÀI 8: L
P TRÌNH D LIU MNG INTERNET Mc tiêu: - Nm v
ững được Python để vi n l
ết các đoạ ệnh.
- Hiểu được khái nim API và định dng d liu JSON/XML.
- S dụng được gói request, urllib để thc hin các tác v truy vn d liu Internet. N i dung chính:
1. D liu Internet và mô hình Request/Response 1.1. HTTP
HTTP (Hyper-Text-Transfer-Protocol) là một giao thức mức ứng dụng cho các hệ thống phân phối,
cộng tác, đa phƣơng tiện. Nó đƣợc thiết kế bởi Tim Berners Lee (1989). Giao thức này dựa trên giao
thức TCP/IP. Đây là nền tảng đã đƣợc World-Wide Web (WWW) sử dụng từ năm 1990, cho phép
tải (fetching) các nguồn tài nguyên trên mạng nhƣ tài liệu HTML, text, video, ảnh.
Nó cũng là nền tảng cho bất kỳ trao đổi dữ liệu nào đƣợc thực hiện trên Web với mô hình
Client/Server. Các yêu cầu (Request/HTTP Request) từ client đƣợc gửi đến Server, sau đó Server xử
lý yêu cầu và gửi lại (Response/HTTP Response) dữ liệu đến client. Các Request và Response là các Message (HTTP Message).
Stateless: HTTP là giao thức phi trạng thái (stateless), không có mối liên hệ nào giữa hai yêu cầu
(request) đƣợc gửi đi, dù nó thực hiện trên cùng một kết nối (đến cùng 1 server). Thí dụ, client,
thông qua web browser (nhƣ chrome/firefore) gửi yêu cầu đến https://www.vanlanguni.edu.vn/dao- tao/nganh-dao-tao, tiếp tục nó có thể gửi một yêu cầu khác đến
https://www.vanlanguni.edu.vn/trang-chu/lich-su, cả hai yêu cầu này không có mối liên hệ gì với nhau.
Cookie: Đôi khi một ứng dụng cần chia sẻ trạng thái giữa những yêu cầu của phiên làm việc
(session). Chẳng hạn trong ứng dụng bán hàng online, ngƣời dùng thêm 1 sản phẩm vào giỏ. Sau đó,
quay lại trang chính để tìm kiếm và thêm sản phẩm khác vào giỏ. Do HTTP là stateless, nên HTTP
Cookie sẽ hỗ trợ nhằm duy trì trạng thái của hai phiên làm việc trên. Phần Cookie này đƣợc thêm
vào phần header của HTTP Message.
Thực hành Lập trình Python nâng cao Trang 3
Bộ môn Khoa học Dữ liệu 1.2. HTTP Message
Thông điệp HTTP (HTTP Message) là thông tin đƣợc trao đổi qua lại giữa Client và Server. Trong
đó, HTTP Request Message là thông điệp gửi từ Client đến Server, và ngƣợc lại là HTTP Response Message.
Phiên bản HTTP/1.1 của HTTP Message đƣợc chuẩn hóa vào năm 1997, đây là phiên bản giao
thức HTTP mặc định trong các trình duyệt. Trong khi đó, HTTP/2.0 chuẩn hóa năm 2015 là phiên
bản cải tiến tiếp theo. Nếu Server hỗ trợ HTTP/2.0 thì các trình duyệt sẽ tự động sử dụng phiên bản HTTP/2.0. 1.2.1. HTTP Request
HTTP Request là thông báo yêu cầu từ máy khách gữi đến máy chủ. Nội dung thông báo bao gồm:
Request Line, Request Header và Request Body (tùy chọn).  Request Line:
o Tên phƣơng thức: GET, POST, PUT, DELETE
o URL: là địa chỉ định danh tài nguyên
o HTTP version: phiên bản của giao thức HTTP (ví dụ HTTP/1.0, HTTP/1.1)
 Request Header: cho phép client gửi thêm các thông tin bổ sung đính kèm với HTTP
Request, Một số trƣờng thông dụng nhƣ:
o Accept loại nội dung có thể nhận đƣợc từ thông điệp response (ví dụ: text/plain, text/html…)
Thực hành Lập trình Python nâng cao Trang 4
Bộ môn Khoa học Dữ liệu
o Accept-Encoding: các kiểu nén đƣợc chấp nhận (ví dụ gzip, deflate)
o Connection: tùy chọn điều khiển cho kết nối hiện thời. Ví dụ: keepalive, Upgrade…
o Cookie: thông tin HTTP Cookie từ server
o User-Agent: thông tin về user agent của ngƣời dùng
 Request Body (tùy chọn): Các yêu cầu tìm nạp tài nguyên, nhƣ GET, HEAD, DELETE hoặc
OPTIONS, thƣờng không cần Request Body. 1.2.2. HTTP Response
HTTP Response cũng là một HTTP Message, nên nó cũng có cấu trúc tƣơng tự với HTTP Resquest,
gồm các thành phần Response Line, Response Header và Response Body.
Thực hành Lập trình Python nâng cao Trang 5
Bộ môn Khoa học Dữ liệu
Response Line có cấu trúc nhƣ sau: HTTP-version – Status Cod e – Reason Phrase HTT -version P
Phiên bản HTTP, thông d ng nh ụ ất là HTTP/1.1 Status Code Mã phản h i do máy ch ồ g ủ i v ử ề. Ví d : 200, 301, 50 ụ
Reason Phrase Giải thích ngắn gọn về mã phản hồi
2. Thƣ viện url ib trong python
Module urllib trong Python 3 cho phép ngƣời lập trình để truy cập các trang web. Thông qua url ib,
ngƣời phát triển ứng dụng có thể truy cập các trang web, tải xuống dữ liệu, phân tích cú pháp dữ
liệu, sửa đổi tiêu đề và thực hiện bất kỳ yêu cầu GET và POST nào mà họ có thể cần thực hiện. Dƣới
đây là bảng liệt kê một số package của module url ib. Modules Mô t url ib.request mở và đọc url ib.parse phân tích cú pháp URL url ib.error
cho các trƣờng hợp ngoại ệ l đƣợc nêu ra
url ib.robotparser phân tích cú pháp tệp robot.txt Cài đặt url ib: pip install urllib 2.1. url ib request 2.1.1. urlopen
urlopen dùng để mở một đối tƣợng mạng thông qua chuỗi URL. Trƣờng hợp kết nối thành công, một
đối tƣơng giống nhƣ tập tin sẽ đƣợc trả về, nếu kết nối không thể đƣợc thực hiện, ngoại lệ IOError
đƣợc đƣa ra. Đôi tƣợng trả về hỗ trợ các phƣơng thức sau: read (), readline (), readlines (), fileno (),
close (), info (), getcode () và geturl ().
Thực hành Lập trình Python nâng cao Trang 6
Bộ môn Khoa học Dữ liệu Thí d 1:
Thí d 2: Sinh viên hãy phát triển trên thí dụ 1 bằng cách sử dụng các hàm info(), getcode() và
geturl(), sau đó ghi lại kết quả và giải thích ý nghĩa của từng hàm. 2.1.2. url ib.parse
Giả sử chúng ta muốn tìm kiếm thông tin „basic‟ từ trang web www.python.org, chúng ta có thể vào
trang đó và gõ từ openurl vào trong mục tìm kiếm, rồi nhấn vào nút Seach, khi đó địa chỉ trang có
dạng là https://www.python.org/search/?q=urlopen&submit=Search (xem hình minh họa dƣới đây).
Thực hành Lập trình Python nâng cao Trang 7
Bộ môn Khoa học Dữ liệu
Khi đó để lấy đƣợc nội dung của kết q ả
u tìm kiếm, ta xem thí dụ 2 dƣới đây: Thí d 2:
Bên cạnh đó, chúng ta có thể sử dụng thƣ viện url ib.parse để thay thế, hãy xem thí dụ 3 dƣới đây
(kết quả thí dụ 3 hoàn toàn tƣơng tự thí dụ 2) Thí d 3:
2.2. X lý ngoi l
urlopen có thể gây ra ngoại lệ (exception) URLError trong trƣờng hợp máy chủ tại địa chỉ url không
phản hồi kết quả. Khi đó, ngƣời phát triển ứng dụng nên nắm bắt và xử lý các ngoại lệ này. Xem thí dụ 4 và 5 dƣới đây. Thí d 4:
Thực hành Lập trình Python nâng cao Trang 8
Bộ môn Khoa học Dữ liệu Thí d 5: 3. Rest API và Webservice
3.1. Kiến trúc ca REST
REST (representational state tranfer) là một dạng kiến trúc phần mềm xác định kiểu cho giao tiếp
giữa client và server thông qua mạng. REST cung cấp một tập các ràng buộc cho kiến trúc phần
mềm để thúc đẩy hiệu suất, khả năng mở rộng, tính đơn giản và độ tin cậy trong hệ thống.
REST định nghĩa các ràng buộc sau:
 Stateless: Máy chủ không duy trì bất cứ trạng thái nào giữa các yêu cầu từ máy khách.
 Client-Server: Máy chủ và máy khách phải phát triển độc lập với nhau.
 Cacheable: Dữ liệu đƣợc truy xuất từ máy chủ phải đƣợc máy khách hoặc máy chủ lƣu vào bộ nhớ cache.
 Uniform interface: Máy chủ sẽ cung cấp một giao diện thống nhất để truy cập tài nguyên mà
không cần xác định đại diện của chúng.
 Layered system: Máy khách có thể truy cập tài nguyên trên máy chủ một cách gián tiếp
thông qua các tầng khác nhau nhƣ proxy hoặc load balanci.e r
Thực hành Lập trình Python nâng cao Trang 9
Bộ môn Khoa học Dữ liệu
 Code on demand (tùy chn): Máy chủ có thể chuyển mã nguồn đến máy khách mà nó có thể
chạy, chẳng hạn nhƣ JavaScript cho ứng dụng một trang .
3.2. REST APIs and Web Services
Webservice REST là bất kỳ webservice nào tuân theo các ràng buộc về kiến trúc REST. Các
webservice này hiển thị dữ liệu của họ với thế giới bên ngoài thông qua một API (Application
Programming Interface). API là một tập hợp các công cụ cho phép các ứng dụng khác nhau tƣơng
tác. Một số tên tuổi lớn nhất trên web (nhƣ Reddit, Spotify, Twitter và Facebook) cung cấp các API
miễn phí để cung cấp dữ liệu có giá trị trên máy chủ của họ. Học cách làm việc với API sẽ chuẩn bị
cho bạn làm việc trong việc truy xuất và phân tích dữ liệu để tạo ra thông tin chi tiết và giúp đƣa ra
các dự đoán có giá trị.
Các API REST lắng nghe các phƣơng thức HTTP nhƣ GET, POST và DELETE để biết các thao
tác nào cần thực hiện trên tài nguyên của web service. Tài nguyên là bất kỳ dữ liệu nào có sẵn trong
webservice có thể đƣợc truy cập và thao tác với các yêu cầu HTTP tới API REST. Phƣơng thức
HTTP cho API biết hành động nào cần thực hiện trên tài nguyên. HTTP method Description GET
Retrieve an existing resource. POST Create a new resource. PUT Update an existing resource. PATCH
Partial y update an existing resource. DELETE Delete a resource.
API Endpoints API REST hiển thị một tập hợp các URL công khai mà các ứng dụng khách sử
dụng để truy cập các tài nguyên của web service. Các URL này, trong ngữ cảnh của một API, đƣợc gọi là Endpoint 3.3. REST và Python
Để lập trình tƣơng tác với REST API, những nhà phát triển Python có thể sử dụng requests để gửi
HTTP requests. Nó là một thƣ viện HTTP đƣợc cấp phép của Apache2, đƣợc viết bằng Python.
Cài đặt thƣ viện requests:
Thực hành Lập trình Python nâng cao Trang 10
Bộ môn Khoa học Dữ liệu pip install requests
3.3.1. Phƣơng thức GE T
GET là một trong số các phƣơng thức HTTP phổ biến mà ngƣời lập trình sử dụng khi làm việc với
REST API. Phƣơng thức này chỉ cho phép truy xuất tài nguyên từ một API cho trƣớc, không cho
phép thay đổi hoặc chỉnh sửa tài nguyên. Ngƣời lập trình có thể sử dụng dịch vụ giả
JSONPlaceholder (https://jsonplaceholder.typicode.com) để kiểm tra GET. Thí d 6:
Đoạn mã này gọi request.get () để gửi yêu cầu GET tới /todos/1, yêu cầu này sẽ phản hồi với m ục
todo với ID 1. Trong thí dụ này, dữ liệu trả về có định dạng JSON.
Câu hi: làm sao để có thể xem headers của response trả về:
3.3.2. Phƣơng thức POST
POST là một phƣơng thức khác của HTTP. Phƣơng thức này đƣợc dùng để tạo/thêm nguồn tài
nguyên mới tại địa chỉ tài nguyên (URI) đã đƣợc chỉ định. Trƣờng hợp mã trạng thái (status code) trả
về là 201, nghĩa là tài nguyên mới đƣợc tạo; trƣờng hợp không đủ thông tin để tạo tài nguyên, giá trị
trạng thái sẽ là 400 (Bad Request). Trong trƣờng hợp có xung đột (Conflict), mã trạng thái sẽ có giá trị là 409. Tr ờ
ƣ ng hợp mã trạng thái trả về là 200, nghĩa là tài nguyên mới đ ợ ƣ c thêm vào. Thí d 7:
Thực hành Lập trình Python nâng cao Trang 11
Bộ môn Khoa học Dữ liệu
Thí dụ trên gọi requests.post() để tạo mới một todo trong hệ thống. Trƣớc tiên, khai báo từ điển
todo. Sau đó, gán todo vào tham số json, thao tác này sẽ đƣợc requests.post() tự động thiết lập
Content-Type của headers là application/json (headers = {“Content-Type”: “application/json”}. Có
thể làm theo thao tác thủ công nhƣ thí dụ 8 dƣới đây: Thí d 8:
Ghi chú: json.dumps() là hàm thuộc gói json có trong thƣ viện chuẩn. Gói thƣ viện này cung cấp các
phƣơng pháp hữu ích để làm việc JSON trong Python.
3.3.3. Các phƣơng thức khác
Bên cạnh GET và POST, requests còn cung cấp các phƣơng thức khác nhƣ PUT, PATCH và
DELETE. Sinh viên có thể tự tìm hiểu thêm các phƣơng thức này. 3.3.4. API Key
Khóa API là một giá trị duy nhất đƣợc chỉ định cho ngƣời dùng sử dụng các dịch vụ. Bằng cách xem
khóa đƣợc cung cấp theo yêu cầu, dịch vụ sẽ kiểm tra tính hợp lệ của khóa trƣớc khi cấp hoặc không
quyền cho ngƣời dùng truy cập sử dụng dịch vụ có liên quan.
Thực hành Lập trình Python nâng cao Trang 12
Bộ môn Khoa học Dữ liệu Thí d 9: Lƣu ý:
1. Sinh viên có thể tham khảo hƣớng dẫn tại đƣờng link https://blog.hubspot.com/website/how-
to-get-youtube-api-key để lấy API_KEY.
2. Xem cách gọi API thông qua HTTPBasicAuth tại link https://realpython.com/python- requests/ 3.4. JSON
JSON (JavaScript Object Notation) là định dạng dữ liệu theo cặp key – value. Hầu hết các ngôn ngữ
lập trình hiện nay đều dễ dàng đọc đƣợc loại định dạng này. JSON là một định dạng để gửi và nhận
dữ liệu thông qua API. Định dạng này mã hóa các cấu trúc nhƣ danh sách (list) và từ điển
(dictionary) thành chuỗi để đảm bảo các ứng dụng có thể dễ dàng đọc đƣợc. Thí d 10:
{'kind': 'Response', 'items': [{'id': '7cmvABXyUC0', 'statistics':
{'viewCount': '784', 'commentCount': '2'}}], 'pageInfo': {'totalResults': 1, 'resultsPerPage': 1}}
Python hỗ trợ xử lý JSON thông qua thƣ viện json. Thƣ viện này có hai phƣơng thức chính gồm:
 dumps: chuyển đối tƣợng thành chuỗi.
 loads: chuyển chuỗi JSON thành đối tƣợng
Thí d 11: S dụng JSON để chuyn (dumps) list thành chuỗi và ngƣợc li (loads)
Thực hành Lập trình Python nâng cao Trang 13
Bộ môn Khoa học Dữ liệu
Thí d 12: S dụng JSON để chuyn (dumps) t điển thành chuỗi và ngƣợc li (loads) Tài liu tham kh o:
1. https://www.oreil y.com/library/view/restful-web-
services/9780596529260/ch09.html#id392478
2. https://medium.com/geekculture/http-th -
e request-response-cycle-ddcb5bb70707
3. https://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf
4. https://xuanthulab.net/giao-thuc-http-va-cau-truc-co-ban-cua-http-message.html
5. https://docs.microsoft.com/en-
us/dotnet/api/system.net.http.httprequestmessage.version?view=net-5.0
Thực hành Lập trình Python nâng cao Trang 14
Bộ môn Khoa học Dữ liệu
6. https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
7. https://www.geeksforgeeks.org/python-url ib-module/
8. https://medium.com/geekculture/http-th -
e request-response-cycle-ddcb5bb70707
9. https://realpython.com/api-integration-i - n python/
10. https://blog.hubspot.com/website/how-t - o get-youtube-api-key
11. https://docs.python-requests.org/en/master/user/quickstart/#make-a-request
Thực hành Lập trình Python nâng cao Trang 15
Bộ môn Khoa học Dữ liệu BÀI TẬP CHƢƠNG 8
[Yêu cu sinh viên n p bài] Bài t p 1:
Sinh viên hãy hoàn thành thí dụ 1 bằng cách bổ sung vào đoạn chƣơng trình để lƣu kết quả
hiện thị trong tập tin có định dạng html, có xử lý ngoại lệ URLError và HTTPError, và hãy nhận
xét kết quả nhìn thấy đƣợc.
Bài tp 2: Sinh viên hãy cho biết kết quả của câu lệnh sau đây, sinh viên có nhận xét gì về kết quả này
x = urllib.request.urlopen('https://www.google.com/search?q=test') Bài t p
3: Sinh viên hãy quan sát hai cách truy vấn dữ liệu từ trang http://python.org dƣới đây, so sánh và nhận xét Cách 1:
import urllib.request
url_google = urllib.request.urlopen('http://python.org/') html = url_google.read() Cách 2:
import urllib.request
with urllib.request.urlopen('http://python.org/') a s response: html = response.read( )
Bài tp 4: Đoạn code dƣới đây dùng để lƣu trữ ảnh (binary_framing2.png) lấy từ địa chỉ
https://developer.mozil a.org/en-US/docs/Web/HTTP/Messages/binary_framing2.png, sinh viên
hãy phát triển đoạn script này để có thể lƣu hết toàn bộ các ảnh tại địa chỉ
https://developer.mozil a.org/en-US/docs/Web/HTTP/Messages/.
import urllib.request
urllib.request.urlretrieve("https://developer.mozilla.org/en-
US/docs/Web/HTTP/Messages/binary_framing2.png", "binary_framing2.png")
Gi ý: Sinh viên sử dụng biểu thức regular-expession (thƣ viện re) để phân tích lấy url chứa ảnh.
Bài tp 5: Đoạn chƣơng trình dƣới đây đọc dữ liệu từ địa chỉ 'http://sixty-north.com/c/t.txt' và kết
quả lƣu vào trong danh sách lstStory. Sinh viên hãy phát triển đoạn chƣơng trình này để có thể lƣu
toàn bộ dữ liệu đọc đƣợc với định dạng tập tin lƣu trữ là csv.
Thực hành Lập trình Python nâng cao Trang 16
Bộ môn Khoa học Dữ liệu
from urllib.request import urlopen
with urlopen('http://sixty-north.com/c/t.txt') as story: lstStory = story.readlines() print(lstStory[0]) print('done') Bài t p
6: Đoạn mã dƣới đây gọi api để để lấy kết quả trả về từ iss-pass.json với tham số „lat‟ là
37.78 và „lon‟ là -122.41. Kết quả trả về nhƣ hình dƣới đây. Sinh viên hãy bổ sung đoạn mã để lấy giá trị
duration của phần tử đầu tiên. Bài t p
7: Sinh viên hãy xem hƣớng dẫn tạo API KEY ở mục lƣu ý tại trang 13, phát triển thí dụ 9
trong bài (trang 12) để truy vấn tập các videos với videoid = [7cmvABXyUC0, 9eH-7x7swEM,
JndzGxbwvG0, l0P5_E6J_g0] và lƣu kết quả thành tập tin csv gồm những thông tin nhƣ bảng dƣới đây: videoid
viewCount likeCount dislikeCount favoriteCount commentCount Gi ý:
1. Khai báo tập items để ng k lƣu bả
ết quả, tập items này gồm nhiều phần tử, m i ỗ phần t ử là m t t ộ ập hợp
gồm (videoid, viewCount, likeCount, dislikeCount, favoriteCount, commentCount). 2. S d
ử ụng DataFrame trong thƣ viện pandas, và hàm to_csv để xuất kết quả (items) sang file định dạng
csv nhƣ gợi ý dƣới đây.
import pandas as pd
fields = ['videoid','viewCount','likeCount','dislikeCount','favoriteCount','comment Count']
summaryResults = pd.DataFrame(items, columns = fields)
summaryResults.to_csv('path/filename.csv')
Thực hành Lập trình Python nâng cao Trang 17
Bộ môn Khoa học Dữ liệu
Ph lc: Nhng Status Code thông dng Code Status Ý nghĩa 2xx Success
Standard response for successful HTTP requests. The actual res
will depend on the request method used. In a GET request response will contain a
n entity corresponding to the reque
resource. In a POST request, the response will contain a n e 200 OK
describing or containing the result of the action.
The request has been fulfilled, resulting in the creation of a 201 Created resource.
The server successfully processed the request and is not returnin 204 No Content content.
The server is delivering only part of the resource (byte serving)
to a range header sent by the client. The range header is us
HTTP clients to enable resuming of interrupted downloads, or sp 206 Partial Content
download into multiple simultaneous streams. 3xx Redirection Moved 301 Permanently
This and all future requests should be directed to the given URI..
The HTTP/1.0 specification (RFC 1945) required the client
perform a temporary redirect (the original describing phrase 302 Found "Moved Temporarily")
The response to the request ca
n be found under another URI us
GET method. When received in response to a POST
PUT/DELETE), the client should presume that the server
received the data and should issue a redirect with a separate 303 See Other message. 4xx Client errors
Thực hành Lập trình Python nâng cao Trang 18
Bộ môn Khoa học Dữ liệu
The server cannot or will not process the request due to an app
client error (e.g., malformed request syntax, size too large, inv 400 Bad Request
request message framing, or deceptive request routing).
Similar to 403 Forbidden, but specifically for use wh
authentication is required and has failed or has not yet been prov
The response must include a WWW-Authenticate header f 401 Unauthorized
containing a challenge applicable to the requested resource.
The request was valid, but the server is refusing action. The
might not have the necessary permissions for a resource, or may 403 Forbidden an account of some sort.
The requested resource could not be found but may be availab 404 Not Found
the future. Subsequent requests by the client are permissible. Too Many 429 Requests
The user has sent too many requests in a given amount of time. 5xx Server errors Internal
Server A generic error message, given when an unexpected condition 500 Error
encountered and no more specific message is suitable.
The server was acting as a gateway or proxy and received a n in 502 Bad Gateway
response from the upstream server Service
The server is currently unavailable (because it is overloaded or d 503 Unavailable
for maintenance). Generally, this is a temporary state.
i https://en.wikipedia.org/wiki/Load_balancing_(computing)
Thực hành Lập trình Python nâng cao Trang 19