Bài 10: Gửi Request Trong Python Với Requets Module
Có thể bạn quan tâm
Tiếp tục với series bài này mình sẽ giới thiệu với mọi người về requests module giúp mọi người có thể gửi request một cách đơn giản nhất trong Python.
Vì module này hỗ trợ chúng ta gửi request rất đa dạng nên mình chỉ trình bày những gì hay dùng nhất thôi, còn các bạn muốn xem chi tiết thì có thể lên trang chủ của nó để xem.
1, Requests module là gì?
Requests module là một thư viện hỗ trợ chúng ta có thể gửi bất kỳ một loại request HTTP nào một cách đơn giản nhất. Và tác giả của module này chính là Kenneth Reitz tác giả của các module đơn giản mà rất thần thánh trong giới Python :D.
Module này hỗ trợ cả python 2 và 3 nhưng Python 3 thì sẽ hoàn hảo hơn.
Trong bài viết này mình sẽ demo trên Python 3.
2, Cài đặt.
Mặc định thì thư viện này không được install kèm python nên các bạn muốn dùng thì cần phải tải nó. Để install nó thì các bạn chỉ cần chạy lệnh.
pip install requestsĐể kiểm tra đã thành công hay chưa thì bạn chỉ cần import module request vào và chạy, nếu không có lỗi gì thì là đã thành công. VD:
thanhtai@thanhtai_info:~$ python3 Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import requests >>>3, Sử dụng.
Đầu tiên để có thể sử dụng được module này thì bạn cần phải import nó vào đầu chương trình.
import requestsTạo request.
Để tạo một request các bạn chỉ cần sử dụng theo cú pháp sau:
requests.method(url, params, data, json, headers, cookies, files, auth, timeout, allow_redirects, proxies, verify, stream, cert) # hoặc requests.Request(method, url, params, data, json, headers, cookies, files, auth, timeout, allow_redirects, proxies, verify, stream, cert)Trong đó:
- method sẽ là phương thức HTTP request mà bạn muốn tạo, các phương thức này có thể là: GET, POST, PUT, PATCH, DELETE và OPTIONS.
- url là String chứa URL của trang web mà bạn muốn gửi request đến.
- data là một Dictionary hoặc list of tuples hoặc bytes và bạn muốn gửi kèm trong body của request. Tham số này có thể bỏ trống.
- json tương tự như data, nhưng kiểu dữ liệu là JSON serializable Python object. Tham số này có thể bỏ trống.
- headers là một Dictionary chứa các HTTP header mà bạn muốn gửi kèm request. Tham số này có thể bỏ trống.
- cookies là một Dictionary hoặc CookieJar Object chứa các cookie mà bạn muốn gửi kèm request. Tham số này có thể bỏ trống.
- files là một Dictionary chứa các files object (file object là result của hàm open()) mà bạn muốn gửi kèm request. Tham số này có thể bỏ trống.
- auth là một tuple chứa username, password của trang web mà bạn muốn gửi request đến nếu như trang web đó được bảo mật bởi Basic/Digest/Custom authentic. Tham số này có thể bỏ trống.
- timeout là một float hoặc tubple đơn vị tính bằng giây thiết lập request có thể chờ tối đa là bao nhiêu giây. Tham số này có thể bỏ trống.
- allow_redirects là một bool thiết lập xem request này có cho phép redirect không, mặc định thì giá trị này bằng True có nghĩa là cho phép. Tham số này có thể bỏ trống.
- proxies là một Dictionary chứa các protocol để ánh xạ đến proxy của URL. Tham số này có thể bỏ trống.
- verify là một bool cấu hình xem có cho phép xác thực TLS hay không, mặc định là True. Tham số này có thể bỏ trống.
- stream là một bool cấu hình xem dữ liệu trả về có Stream hay không. Tham số này có thể bỏ trống.
- cert là một String chứa đường dẫn đến ssl client file (.pem). Tham số này có thể bỏ trống.
Phương thức này sẽ trả về mộtResponse Object.
VD:
- Gửi một get request đến Toidicode.com:
- Gửi một GET request kèm param:
- Gửi một POST data request kèm se timeout là 3s:
- Tạo một POST request upload file lên server:
Dữ liệu trả về - Response
Khi tạo request thành công thì dữ liệu trả về sẽ là một Object chứa các thuộc tính và phương thức với chức năng như sau:
| Key | Type | Return | Description |
| apparent_encoding | Thuộc tính | String | Trả về kiểu mã hóa của dữ liệu trả về |
| close() | Phương thức | None | Đóng connection |
| content | Thuộc tính | String | Dữ liệu server trả về |
| cookies | Thuộc tính | CookieJar hoặc None | Cookies của request server trả về |
| elapsed | Thuộc tính | None hoặc timedelta | Thời gian thực thi request |
| encoding | Thuộc tính | None hoặc String | Kiểu mã hóa dữ liệu khi truy cập thuộc tính text |
| headers | Thuộc tính | None hoặc Dictionary | Header server trả về |
| history | Thuộc tính | None hoặc list | Các request đã thực thi khi thực thi request. |
| is_permanent_redirect | Thuộc tính | bool | Trả về True nếu request có redirect |
| is_redirect | Thuộc tính | bool | Trả về True nếu request có redirect bằng HTTP code |
| iter_content(chunk_size=1, decode_unicode=False) | Phương thức | Object | Lặp lại dữ liệu trả về khi Request set strame=True |
| iter_lines(chunk_size=512, decode_unicode=None, delimiter=None) | Phương thức | Object | Tương tự phương thức iter_content() nhưng sẽ lặp lại theo dòng |
| json(**kwargs) | Phương thức | Json | Chuyển đổi dữ liệu trả về thành Json, nếu có |
| links | Phương thức | Dictionary | Trả về list Header links của response đã được xử lý |
| next | Thuộc tính | PreparedRequest | Trả về PreparedRequest cho request tiếp theo |
| ok | Thuộc tính | bool | Trả về True nếu HTTP STATUS trả về là nhỏ hơn 400 ngược lại là False |
| raise_for_status() | Phương thức | None hoặc HTTPError | Raises HTTPError nếu có 1 điều đó xảy ra |
| reason | Thuộc tính | None hoặc String | Trả về lí do HTTP trạng thái được trả về. |
| request | Thuộc tính | None hoặc PreparedRequest | Xem chi tiết tại đây |
| status_code | Thuộc tính | None hoặc String | HTTP Status mà server trả về |
| text | Thuộc tính | String | Nội dung của request trả về. |
| url | Thuộc tính | None hoặc String | URL cuối cùng sau khi thực thi request. |
VD:
import requests r = requests.get("http://ip-api.com/json") #request: https://toidicode.com/?post_id=135 print(r.apparent_encoding) # print(r.content) print(r.encoding) print(r.cookies) print(r.elapsed) print(r.encoding) print(r.headers) print(r.history) print(r.is_permanent_redirect) print(r.iter_content()) print(r.links) print(r.raise_for_status()) print(r.json())Kết quả trả về
ascii utf-8 0:00:00.165961 utf-8 {'Content-Length': '271', 'Date': 'Mon, 17 Sep 2018 01:33:24 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Access-Control-Allow-Origin': '*'} [] False {} None {'as': 'AS7552 Viettel Group', 'zip': '', 'regionName': 'Hanoi', 'lat': 21.0333, 'country': 'Vietnam', 'status': 'success', 'timezone': 'Asia/Ho_Chi_Minh', 'lon': 105.85, 'countryCode': 'VN', 'org': 'Viettel Group', 'city': 'Hanoi', 'isp': 'Viettel Group', 'region': 'HN', 'query': '117.4.242.101'}Các excetion có thể xảy ra.
RequestException - Có một lỗi gì đó xảy ra trong quá trình thực thi request của bạn.
ConnectionError - Kết nối xảy ra lỗi.
HTTPError - Có lỗi HTTP xảy ra.
URLRequired - URL của bạn không chính xác
TooManyRedirects - Request redirect quá nhiều lần.
ConnectTimeout - Kết nỗi bị timeout.
ReadTimeout - Server không trả về dữ liệu trì trong khoảng thời gian được phân bổ.
Timeout - Request bị timeout (Nên dùng exception này để bắt cả ConectionTimeout và ReadTimeout nếu bạn muốn code ngắn gọn).
4, Kết.
Phần trên mới chỉ là một phần giới thiệu nhanh gọn về module requests thôi, nếu như bạn cần tìm hiểu sâu hơn về module này thì hãy lên trang chủ của nó. Thanks, good lucks!
Từ khóa » Get Và Post Trong Python
-
Phương Thức GET Và POST - Viblo
-
Hàm GET / POST đơn Giản Trong Python? - HelpEx
-
Python Sử Dụng Requsets Post Và Get , để đăng Nhập Và Trích Xuất Dữ ...
-
Hàm GET / POST đơn Giản Trong Python
-
So Sánh Sự Giống Và Khác Nhau Giữa GET Và POST - Hoclaptrinh
-
Sử Dụng Mô-đun Requests Trong Python - Code Tutsplus
-
Request Cơ Bản Trong Python - Làm Việc Thông Thái
-
Yêu Cầu GET Và POST Bằng Python - Python Request Get Tham Số
-
[Python Cơ Bản Thường Dùng Trong Công Việc] Phần 13 : Restful Client
-
Python: Thư Viện Requests Của Python | V1Study
-
Yêu Cầu GET Và POST Bằng Python - Tạo Một Yêu Cầu Bài đăng ...
-
Python — Xử Lý GET Và POST Trong Cùng Một Cái Nhìn Bình
-
Bắt đầu Với Python - Get Request
-
Xử Lý Form Với Phương Thức GET - Freetuts