一、 簡介
網絡通信,簡而言之,就是通過各種物理鏈路和協議,實現不同地理位置的計算機或其他電子設備之間信息交換的過程。這些信息可以是文本、圖像、音頻、視頻等多種格式,通過網絡傳輸至目標設備,從而實現遠程通信、資源共享、協同工作等功能
1.1 TCP/IP
1、TCP/IP是非常重要的協議,由IP和TCP兩個協議構成
2、IP(Internet Protocol)是一種低級的路由協議,無法保證所有包都能抵達目的地,也不能保證包按順序抵達
3、TCP能夠保證數據包安全地按照發送時的順序送達目的地
1.2 IP地址
每臺計算機都必須有一個與眾不同的標識,這就是IP地址,TCP/IP使用IP地址來標識源地址和目的地址
1.3 端口
1、每一臺計算機又有很多網絡通信程序在運行,提供網絡服務或進行通信,這就需要不同的端口進行通信
2、如果把IP地址比作電話號碼,那么端口就是分機號碼,在進行網絡通信時不僅需要指定IP地址,還需要指定端口號
自己開發使用1024以上的端口
###1.4 HTTP/HTTPS
1、HTTP是無連接協議,即在每一次請求時都建立連接,服務器在處理完客戶端的請求后,會先應答客戶端,然后斷開連接,不會一直占用網絡資源
2、HTTP/1.1共定義了8種請求方法:OPTIONS、GET、POST、PUT、DELETE、TRACE和CONNECT
3、HTTPS與HTTP的區別是:HTTPS使用https://代替http://,HTTPS使用端口443,而HTTP使用端口80與TCP/IP通信
4、GET方法:用于向指定的資源發出請求,被發送的信息"顯式"地跟在URL后面。它一般只用于讀取數據,例如靜態圖片等。GET方法有點像使用明信片給別人寫信,將‘信的內容’寫在外面,接觸到的人都可以看到,因此是不安全的
4、POST方法:用于向指定的資源提交數據,請求服務進行處理,例如提交表單或者上傳文件等,數據被包含在請求體中。POST方法像是把“新的內容”裝入信封中,接觸到該信封的人都看不到信的內容,因此是相對安全的
二、請求發送
get請求
發送GET請求相對簡單,你可以直接使用 urllib.request.urlopen() 方法。這個方法會打開一個URL,并返回一個HTTPResponse對象,該對象包含了服務器響應的數據
import urllib.request
url = 'http://example.com/api/data'
# 發送GET請求
response = urllib.request.urlopen(url)
# 讀取響應數據
data = response.read().decode('utf-8') # 將響應的二進制數據解碼為字符串
print(data)
post請求
發送POST請求稍微復雜一些,因為你需要構建一個請求體(request body),并且可能需要設置一些HTTP頭部(比如Content-Type)。你可以使用 urllib.request.Request 類來創建一個請求對象,并使用 urllib.parse.urlencode() 來將字典數據編碼為URL編碼的字符串,用于POST請求的請求體
import urllib.request
import urllib.parse url = 'http://example.com/api/data'
data = { 'key1': 'value1', 'key2': 'value2'
}
# 將數據編碼為URL編碼的字符串
data_encoded = urllib.parse.urlencode(data).encode('utf-8')
# 創建Request對象,并設置請求方法為POST,以及請求體
req = urllib.request.Request(url, data=data_encoded, method='POST')
# 添加HTTP頭部(如果需要)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
# 發送POST請求
response = urllib.request.urlopen(req)
# 讀取響應數據
data = response.read().decode('utf-8')
print(data)
字符串轉化為字節序列
params.encode()
將字節序列數據轉化為字符串
params.decode()