一.socket
1.socket套接字
socket又叫套接字,指的是实现通信过程的两个端,等待请求的一端
叫服务端,发送请求的一端叫客户端.
python中提供了socket模块来支持socket编程
import socket
socket(family, type)
family - 设置IP类型 AF_INET - IPV4 AN_INET6 - ipv6
type - 设置传输类型 SOCK_STREAM - tcp SOCK_DREAM - udp
# ==============服务器套接字
# 1.创建套接字对象
# 创建一个套接字对象,基于ipv4和tcp
serve = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定IP地址和端口
"""
bind((ip, 端口号))
ip地址 - 服务器对应的计算机的地址, 字符串
端口号 - 用来区分计算机上不同服务;是一个数字 范围0-65535.
但是1024以下的是著名端口,用来表示一些特殊的服务:一般不要用
"""
serve.bind(('10.7.187.72', 8080))
# 3.开始监听
"""
listen(最大监听数)
最大监听数 - 用来设置当前服务器一次可以处理多少个请求.
"""
serve.listen(100)
print('开始监听')
# 4. 让服务器一直处于启动状态
while True:
# 5.接受客户端发送的请求,返回建立的会话和客户端地址
# 注意: 这段代码会阻塞线程(程序运行到这会停止下来,直到有客户端给当前服务器
# 发送请求为止)
conversation, addr = serve.accept()
print('接受到请求:', addr)
# 6.接受消息(客户端发送给服务器的消息)
"""
recv(缓存大小) - 获取客户端给服务器发送的数据.返回值是二进制
缓存大小 - 决定一次可以接受数据的最大字节
str(二进制数据, 编码方式)
re_data(二进制).decode(编码方式)
"""
re_data = conversation.recv(1024)
print(re_data.decode('utf-8'))
# 7. 发送数据
"""
send(数据) - 将指定的数据发送给客户端
数据要求: 二进制
字符串.encode('utf-8(编码方式)')
"""
message = input()
conversation.send(bytes(message, encoding='utf-8'))
# 关闭连接
# conversation.close()
二.URL
什么是URL: 统一资源定位符
通过一个url, 能找到互联网上唯一的1个资源
url的基本格式 = 协议://主机地址/路径
协议: 不同的协议,代表不同的资源查找方式,资源传输方式
主机地址:存放资源的主机的ip地址(域名)
路径: 资源在主机中的具体位置
三.HTTP
超文本传输协议,访问的是远程的网络资源,格式是 http://
(规定客户端和服务器之间的数据传输格式,使其能够有效地进行数据沟通)
特点:
简单快速
灵活(允许传送各种各样的数据)
非持续链接
1.一个完整的http请求过程
请求头: 包含了对客户端的环境描述,客户端请求信息等
请求方法: 常见的GET POST(get的安全性较低.一般只用于索取数据)
Host : 主机地址
User-Agent : 客户端类型,客户端的软件环境
Accept: 客户端所能接受的数据类型
Accept-Language: 客户端的语言环境
Accept-Encoding: 客户端支持的数据压缩方式
请求体: 客户端发送给服务器的数据.
2.一个完整的响应阶段
状态码
响应头: 包含对服务器的描述, 对返回数据的描述
Server: 服务器的类型
Content-Type: 返回数据的类型
Content-Length: 返回数据的长度
data: 响应的时间
响应体: 服务器返回給客户端的数据
状态码:
200 OK 请求成功
400 Bad Request 客户端请求的语法错误,服务器无法解析
404 Not Found 服务器无法根据客户端的请求找到资源
500 Internal Server Error 服务器内部错误,无法完成请求
file
访问本地计算机上的资源, 格式file://
mailto
访问的电子邮件地址,格式是mailto://
四.
python中去做http请求,需要使用一个第三方库:requests
import requests
#get(url,参数字典) - 返回响应
# 1. 向服务器发送请求
# a. 手动拼接url
# url = 'https://www.apiopen.top/satinApi?type=1&page=1'
# # respose = requests.get(url) # url, params=None, **kwargs
# # print(respose)
url = 'https://www.apiopen.top/satinApi'
respose = requests.get(url, {'type': 1, 'page': 1})
print(respose)
# 2.获取响应头
header = respose.headers
print(header)
# 3.获取响应体
"""
a.获取二进制格式的响应体
"""
content = respose.content
print(content,type(content))
"""
b.获取json格式的响应体 - 自动将json数据转换成响应的python数据
"""
json = respose.json()
print(type(json))
"""
c.获取字符串格式的响应体
"""
text = respose.text
print(type(text))
# 应用: 下载网络图片
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1543395098&di=2a5bbaa5600097b050ba69a688672de9&src=http://p0.qhimgs4.com/t0112e7ebfdef7f923d.jpg'
respose = requests.get(url)
content = respose.content
with open('234.jpg', 'bw') as f:
f.write(content)