Lập trình mạng Python: client – server (phần 7)

Nói chuyện với một giao thức

Nên script ví dụ thứ hai tạo một URL, và lấy tài liệu cái tương ứng với nó. Hoạt động đó
có vẻ như hoàn toàn đơn giản, và tất nhiên trình duyệt web của bạn làm việc vất vả để làm nó
trông hoàn toàn cơ bản. Nhưng lí do thực sự rằng một URL có thể được sử dụng để lấy tài liệu,
tất nhiên là rằng URL là một loại công thức cái mô tả nơi nào tìm ra – và làm cách nào lấy –
một tài liệu đã cho trên Web. URL chứa tên của một giao thức, được theo sau bởi tên của máy
nơi tài liệu nằm, và kết thúc với đường dẫn cái đặt tên một tài liệu cụ thể trên máy.
Lí do sau đó rằng chương trình Python search2.py có thể phân giải URL và lấy tài liệu là rằng
URL cung cấp các lệnh cái thông báo giao thức mức thấp hơn làm cách nào tìm ra tài liệu.
Giao thức mức thấp hơn cái URL sử dụng, trên thực tế là HTTP nổi tiếng, cái là cơ sở của hầu như
trao đổi thông tin web hiện đại. Nó là HTTP cái cung cấp cơ chế theo đó thư viện Requests có thể
lấy kết quả từ Google. Bạn nghĩ nó trông là gì nếu bạn sẽ tước tầng đó đi – cái gì xảy ra nếu bạn
muốn sử dụng HTTP để lấy kết quả trực tiếp? Kết quả là search3.py, như thể hiện dưới đây:

Making a Raw HTTP Connection to Google Maps
#!/usr/bin/env python3
# Foundations of Python Network Programming, Third Edition
# https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter01/search3.py
import http.client
import json
from urllib.parse import quote_plus
base = ‘/maps/api/geocode/json’
def geocode(address):
path = ‘{}?address={}&sensor=false’.format(base, quote_plus(address))
connection = http.client.HTTPConnection(‘maps.google.com’)
connection.request(‘GET’, path)
rawreply = connection.getresponse().read()
reply = json.loads(rawreply.decode(‘utf-8’))
print(reply[‘results’][0][‘geometry’][‘location’])
if __name__ == ‘__main__’:
geocode(‘207 N. Defiance St, Archbold, OH’)

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *