服務(wù)器
socket又叫套接字弧圆,指的是 實(shí)現(xiàn)網(wǎng)絡(luò)通信的兩端赋兵。分為服務(wù)器對應(yīng)的套接字和客戶端對應(yīng)的套接字笔咽。
1.python通過提供socket標(biāo)準(zhǔn)庫來支持socket編程。socket編程就是用程序?qū)崿F(xiàn)服務(wù)器和客戶端
1.創(chuàng)建服務(wù)器對應(yīng)的套接字對象
socket(family,type) family: 設(shè)置ip類型 AF_INET(ipv4) --默認(rèn)值 type: 設(shè)置傳輸類型 SOCK_STREAM(TCP可靠傳輸)--- 默認(rèn)值
server = socket.socket() # 創(chuàng)建一個(gè)基于ipv4的可靠傳輸?shù)姆?wù)器套接字
2.綁定ip和端口
server.bind((ip,端口))
bind(ip,端口) ip:服務(wù)器的地址 端口: 不同端口用來區(qū)分電腦上不同的服務(wù)霹期。取值范圍是0—65535叶组,0-1024表示著名端口(用來 綁定特殊服務(wù)的端口
3.監(jiān)聽請求
listen(個(gè)數(shù)) --- 需要通過數(shù)字設(shè)置服務(wù)器一次可以處理最大的請求個(gè)數(shù)
server.listen(520)
4.讓服務(wù)器一直處于啟動(dòng)狀態(tài)
while True:
5.接收客戶端的請求
執(zhí)行到accept(),程序會(huì)停下來历造,直到有客戶端在請求服務(wù)器的時(shí)候才會(huì)往下執(zhí)行甩十,
返回會(huì)話和客戶端地址
converstation,addr =server.accept()
6.服務(wù)器給客戶端發(fā)送數(shù)據(jù)
send(data) --- 發(fā)送數(shù)據(jù) data: 需要發(fā)送的數(shù)據(jù),要求是二進(jìn)制(bytes) a.str 轉(zhuǎn) bytes(字符串轉(zhuǎn)換成二進(jìn)制) 方法 1: bytes(字符串吭产,encoding= ‘utf-8’) 方法2: 字符串.encode(編碼方式)
converstation.send(data(二進(jìn)制形式))
7.接收客戶端發(fā)送的消息
` recv(字節(jié)數(shù)) ---- 接收從客戶端發(fā)來的消息 枣氧,參數(shù)是用來設(shè)置 一次能接收的最大字節(jié)數(shù),返回值是接收到的數(shù)據(jù)(二進(jìn)制)
bytes 轉(zhuǎn) str
方法1:str()
方法2:二進(jìn)制.decode(‘utf-8’)
注意: recv方法也阻塞線程,程序運(yùn)行到這里會(huì)停下來等垮刹,等到對方發(fā)送消息為止`
data = converstation.recv(1024)
# re_message = str(data,encoding='utf-8')
re_message = data.decode('ute-8')
print(re_message)
客戶端
1.創(chuàng)建客戶端套接對象
client = socket.socket()
2.鏈接服務(wù)器
client.connect((服務(wù)器地址,端口))
3.給服務(wù)器發(fā)送消息
while True:
message = input('客戶端:')
client.send(message.encode('utf-8'))
4.接收服務(wù)器返回的數(shù)據(jù)
re_data = client.recv(1024)
print(re_data.decode('utf-8'))
requests請求
1.python中沒有網(wǎng)絡(luò)請求张弛,需要一個(gè)第三方庫requests
import requests
requests.get(url, params) --> 返回服務(wù)的響應(yīng)
url -> 請求地址
params -> 客戶端給服務(wù)發(fā)送的數(shù)據(jù)(字典) {參數(shù)名:值}
# https://www.apiopen.top/satinApi?type=1&page=1
url = 'https://www.apiopen.top/satinApi?type=1&page=1'
response = requests.get(url荒典,{'type':1,'page':1})
# 1.獲取響應(yīng)頭
print(response.headers)
#2.拿二進(jìn)制形式的響應(yīng)體
data_bytes= response.content
print(data_bytes)
# 3.拿字符串形式的響應(yīng)體
data_str = response.text
print(data_str)
# 4.拿json格式對應(yīng)的數(shù)據(jù)
data_json = response.json()
print(data_json)