??socket又叫做套接字,就是進行數(shù)據(jù)通信兩端,分為服務端套接字和客戶端套接字。
??python對socket編程的支持:提供一個socket的庫(內(nèi)置)。
??一、服務器套接字
- 創(chuàng)建套接字對象
??格式為:socket(family,type)
??family:確定IP協(xié)議類型,包含AF_INET:ipv4(默認)和AF_INET6:ipv6。
??type:傳輸協(xié)議類型,包含SOCK_STREAM:TCP協(xié)議(默認)和SOCK_DGRAM:UDP協(xié)議。
import socket
server = socket.socket()
- 綁定IP地址和端口
??格式為:bind(地址,端口) 。端口:一臺電腦上一個端口標記一個唯一的服務,范圍:0 ~ 65535,起重0 ~ 1024是著名端口,專門用來標記一個特殊的服務,一般不要用。 另外,同一個端口同一時間只能綁定一個服務。
server.bind(('10.7.153.103',8080))
- 監(jiān)聽客戶端的請求
??格式:listen(最大個數(shù)),同一時間能夠連接的客戶端個數(shù)。
server.listen(512)
- 讓服務器處于運行狀態(tài)
while True:
- 連接客戶端(建立連接),返回連接對象和客戶端地址。
??注意:這句代碼會阻塞線程,知道有客戶端來請求當前服務器為止。
connect, addr = server.accept()
print(addr)
- 服務器給客戶端發(fā)送消息
??格式:send(data)。data:python3中要求類型是bytes。
while True:
message = input('服務器:')
connect.send(message.encode())
- 接收從客戶端發(fā)送過來的信息
??格式:recv(bufsize),其中bufsize:每次能夠接收到的最大字節(jié)數(shù)。返回值為接收到的數(shù)據(jù),類型是bytes。另外,recv也會阻塞線程。
recv_data = connect.recv(1024)
print(str(recv_data, 'utf-8'))
- 斷開連接
connect.close()
??二、客戶端套接字
- 創(chuàng)建套接字對象
import socket
client = socket.socket()
- 連接服務器
client.connect(('10.7.153.103', 8088))
- 接收服務器發(fā)送的消息
while True:
data = client.recv(1024)
print(data.decode(encoding='utf-8'))
- 給服務器發(fā)送消息
message = input('客戶端:')
client.send(message.encode())
- 斷開連接
client.close()
??三、http請求
- 準備url
url = 'https://www.apiopen.top/satinApi?type=1&page=1'
- 發(fā)送請求
??發(fā)送請求有兩種,get和post兩種方式。格式為:get/post(url,參數(shù)對應的字典),返回值是服務器返回的相應。
import requests
response = requests.get(url)
- 通過相應獲取服務器返回的數(shù)據(jù)
??a.獲取字符串類型的數(shù)據(jù)
print(response.text)
??b.獲取json格式的數(shù)據(jù)
print(response.json())
??c.獲取二進制格式的數(shù)據(jù)
print(response.content)
??d.獲取效應頭
print(response.headers)