2018-11-28 Day18

一.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)

你可能感兴趣的:(2018-11-28 Day18)