要求:
-
基于流(stream)套接字(socket)编写一个客户端(client)程序;
-
程序可连接(connect)某服务器网站(比如:t.weather.sojson.com);
-
程序向服务器网站发送 http 请求(GET 方法, /api/weather/city/101040100),服务器网站返回 http 响应(JSON 格式);
-
程序解析并展示服务器网站的响应消息(JSON 格式)。
代码实现:
#coding=utf-8
import socket
import json
from urllib.parse import quote_plus
# 一个HTTP请求报文由请求行、请求头部、空行、请求数据4部分组成
# 请求行由请求方法字段(GET\POST...)、url字段和HTTP协议版本3个字段组成,以\n分离
request_text = """\
GET /api/weather/city/101040100?address={}&sensor=false HTTP/1.1\r\n\
Host: t.weather.sojson.com:80\r\n\
User-Agent: CQUPT\r\n\
Connection: close\r\n\
\r\n\
"""
def get_weather(address): #获取天气预报的json格式数据段
sock = socket.socket() # 创建socket实例
sock.connect(('t.weather.sojson.com', 80)) # 客户端建立连接
request = request_text.format(quote_plus(address))
sock.sendall(request.encode('ascii')) # 客户端发送消息,encode函数使得HTTP的报文以ASCII码的形势发给服务器
data = b''
while True:
more = sock.