#实现HTTP客户端的程序
# coding: utf-8
import socket
s = socket.socket()
host = 'g.cn'
port = 80
s.connect((host, port))
ip, port = s.getsockname()
print("本机 ip 和 port {} {}".format(ip, port))
http_request = "GET / HTTP/1.1\r\nhost:{}\r\n\r\n".format(host)
request = http_request.encode('utf-8')
print('请求', request)
s.send(request)
response = s.recv(1023)
print('响应', response)
print('响应的 str 格式', response.decode('utf-8'))
s.close()
以上程序中所用到的知识点如下:
#操作系统用来进行网络通信的底层方案 #即用来发送/接收数据
用法: s = socket.socket()
用法: s.connect(address) #链接到address #一般address的格式为tuple(host, port) #链接出错,返回socket.error错误
用法:ip, port = s.getsockname() #连接上后,可通过该函数得到本机的 ip 和端口 #返回值通常是tuple(ip, port)
用法:
a, b = (1, 2) print(a)
用法:print("{} {}".format(变量1, 变量2)) #好处:不用判断变量的格式
"GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n" #目前该请求格式未包含body的请求 #GET 是请求的方法(POST也是一种) # / 是请求的路径 # HTTP/1.1 是一种HTTP版本 # host 是请求主机域名
#编码:把 str 转换为 bytes,编码是 utf-8 str.decode('utf-8') #解码:把 bytes 转换为 str,编码是 utf-8 #返回值即为转换结果
用处:s.send(参数) #发送 HTTP 请求(即参数内容)给服务器 # send 函数只接受 bytes 作为参数
用法:response = s.recv(1023) #接受服务器的响应数据 #参数即为接收的最大数据量 #返回值即为相应数据,为bytes类型
创建套接字并链接至远端地址
s = socket.socket() s.connect()
连接后发送数据和接收数据
s.send() s.recv()
传输完毕后,关闭套接字
s.close