模拟urllib实现网页内容的获取
实现http客户端的程序, 获取百度页面http://www.baidu.com:80
import socket
# 实例化socket对象; 默认参数指定为IPv4协议, 和TCP传输协议;
client = socket.socket()
# 连接服务器端
client.connect(('www.baidu.com', 80))
# 给百度服务器发送请求通过GET方法请求主页内容的请求, http协议的版本为1.1;
client.send(b'GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:close\r\n\r\n')
# 接收服务端返回的页面内容;
recvData = client.recv(1024*100)
# 解码为能够识别的字符串;
print(recvData.decode('utf-8'))
# 关闭客户端连接;
client.close()
实现简易的Web服务器端
import socket
import threading
def handler(clientObj):
# 5. 接收客户端发送的请求
recvData = clientObj.recv(1024)
with open('hello.html', 'rb') as f:
sendData = f.read()
# 告诉浏览器http版本
clientObj.send(b'HTTP/1.1 200 ok\r\n\r\n')
clientObj.send(sendData)
def webServer():
# 1. 创建socket对象
server = socket.socket()
# 2. 绑定端口和ip
server.bind(('0.0.0.0', 8080))
# 3. 监听是否有客户端连接
server.listen(5)
print("http服务正在启动8080........")
while True:
# 4. 接收客户端的连接
clientObj, address = server.accept()
t = threading.Thread(target=handler, args=(clientObj, ))
t.start()
server.close()
if __name__ == '__main__':
webServer()