Create ~ Request

Phần này thảo luận về hai phương thức yêu cầu HTTP (Giao thức truyền siêu văn bản) các yêu cầu GET và POST trong và việc triển khai chúng trong dự án.

HTTP là gì?

HTTP là một tập hợp các giao thức được thiết kế để cho phép giao tiếp giữa máy khách và máy chủ. Nó hoạt động như một giao thức phản hồi yêu cầu giữa máy khách và máy chủ.

Trình duyệt web có thể là máy khách và ứng dụng trên server lưu trữ trang web có thể là máy chủ.

Vì vậy, để yêu cầu phản hồi từ máy chủ, chủ yếu có hai phương pháp:

  • GET: để yêu cầu dữ liệu từ máy chủ.
  • POST: gửi dữ liệu cần xử lý lên máy chủ.

Các khối

request get url...with...return...

Ví dụ:

Gửi yêu cầu get không kèm tham số (params), với url = http://lumtest.com/myip.json

Trong ví dụ trên, một yêu cầu get được gửi tới server và nhận về dữ liệu ở dạng json (dictionary). Kết quả trả về được lưu vào biến có tên myip_info và được lấy ra bằng cách sử dụng các khối trong nhóm dictionary.

Kết quả:

    
      {'ip': '58.186.61.102', 'country': 'VN', 'asn': {'asnum': 18403, 'org_name': 'The Corporation for Financing & Promoting Technology'}, 'geo': {'city': 'Hanoi', 'region': 'HN', 'region_name': 'Hanoi', 'postal_code': '', 'latitude': 21.0313, 'longitude': 105.8516, 'tz': 'Asia/Bangkok', 'lum_city': 'hanoi', 'lum_region': 'hn'}}
      58.186.61.102
      VN
      21.0313
      105.8516
      Asia/Bangkok
    
  

Gửi yêu cầu get kèm tham số (params), với url = http://httpbin.org/get

Trong ví dụ trên, một yêu cầu get được gửi kèm dữ liệu ở dạng dictionary tới server và nhận về dữ liệu ở dạng json (dictionary). Kết quả trả về được lưu vào biến có tên server_response và được in ra.

Kết quả:

    
      {'args': {'q': 'food'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61a9dcc2-4a510d404d51d2aa58307452'}, 'origin': '58.186.61.102', 'url': 'http://httpbin.org/get?q=food'}
      food
    
  

request post url...with...return...

Ví dụ:

Gửi yêu cầu post kèm dữ liệu (data), với url = https://httpbin.org/post

Cách thiết lập các thông số và xử lý kết quả trả về hoàn toàn giống như sử dụng khối request get, chỉ khác là ở đây thay vì sự dụng tùy chọn param = ... thì ta sử dụng data = ... để đính kèm dữ liệu truyền lên server.

Kết quả:

    
      {'args': {}, 'data': '', 'files': {}, 'form': {'full_name': 'sang pc'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '17', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61a9e0cb-3be0d2bb4356a28444777a09'}, 'json': None, 'origin': '58.186.61.102', 'url': 'https://httpbin.org/post'}
      sang pc
    
  

request put url...with...return...

Ví dụ:

Gửi yêu cầu put kèm dữ liệu (data), với url = https://httpbin.org/put

Cách thiết lập các thông số và xử lý kết quả trả về hoàn toàn giống như sử dụng khối request post.

Kết quả:

    
      {'args': {}, 'data': '', 'files': {}, 'form': {'geo': 'us'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '6', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61a9e272-0e7bfb1f40073ec157b6f610'}, 'json': None, 'origin': '58.186.61.102', 'url': 'https://httpbin.org/put'}
      us
    
  

Khối lưu dữ liệu gửi đi

  • params: Đi kèm phương thức GET, một đối tượng dictionary hoặc list được gửi đến url được chỉ định
  • data: Đi kèm phương thức POST, Một đối tượng dictionary hoặc list được gửi đến url được chỉ định
  • json: Thường đi kèm phương thức PUT, Một đối tượng dictionary được gửi đến url được chỉ định

Ví dụ:

Gửi yêu cầu put kèm dữ liệu (json), với url = https://httpbin.org/put

Kết quả:

    
      {'args': {}, 'data': '', 'files': {}, 'form': {'geo': 'us'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '6', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61a9e272-0e7bfb1f40073ec157b6f610'}, 'json': None, 'origin': '58.186.61.102', 'url': 'https://httpbin.org/put'}
      us
    
  

timeout = ...

Cho biết bao nhiêu giây để máy khách tạo kết nối hoặc gửi phản hồi. Không bao gồm khối này có nghĩa là yêu cầu sẽ tiếp tục cho đến khi kết nối bị đóng.

Ví dụ:

  • url: https://w3schools.com/python/demopage.php
  • timeout: 0.001

Kết quả:

    
      Connection to w3schools.com timed out. (connect timeout=0.001)