python_web(一)实现HTTP客户端的程序

#实现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()


以上程序中所用到的知识点如下:


  • socket模块

#操作系统用来进行网络通信的底层方案

#即用来发送/接收数据


  • 创建socket对象

用法: s = socket.socket()


  • 服务器端socket函数 connect()

用法: s.connect(address)

#链接到address

#一般address的格式为tuple(host, port)

#链接出错,返回socket.error错误


  • socket函数 getsockname()

用法:ip, port = s.getsockname()

#连接上后,可通过该函数得到本机的 ip 和端口

#返回值通常是tuple(ip, port)


  • 元组的值赋给不同的变量

用法:

a, b = (1, 2)

print(a)


  • 另一种格式化输出

用法:print("{} {}".format(变量1, 变量2))

#好处:不用判断变量的格式


  • http请求格式

"GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n"

#目前该请求格式未包含body的请求

#GET 是请求的方法(POST也是一种)

# / 是请求的路径

# HTTP/1.1 是一种HTTP版本

# host 是请求主机域名


  • str.encode('utf-8')

#编码:把 str 转换为 bytes,编码是 utf-8

str.decode('utf-8')

#解码:把 bytes 转换为 str,编码是 utf-8

#返回值即为转换结果


  • socket函数 send()

用处:s.send(参数)

#发送 HTTP 请求(即参数内容)给服务器

# send 函数只接受 bytes 作为参数


  • socket函数 recv()

用法:response = s.recv(1023)

#接受服务器的响应数据

#参数即为接收的最大数据量

#返回值即为相应数据,为bytes类型


  • 客户端编程思想总结(socket)

创建套接字并链接至远端地址

s = socket.socket()

s.connect()

连接后发送数据和接收数据

s.send()

s.recv()

传输完毕后,关闭套接字

s.close


猜你喜欢

转载自blog.csdn.net/y_silence_/article/details/79427985