一、HTTP協(xié)議概述
HTTP(Hypertext Transfer Protocol)即超文本傳輸協(xié)議,是Web應(yīng)用程序使用的協(xié)議,在Web瀏覽器和Web服務(wù)器之間傳遞HTML頁面和數(shù)據(jù)。HTTP是基于TCP/IP協(xié)議來傳輸數(shù)據(jù)的,是一種無狀態(tài)的協(xié)議。
關(guān)鍵特點(diǎn):
支持客戶/服務(wù)器模式:Web瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)器發(fā)送HTTP請(qǐng)求,然后HTTP服務(wù)器會(huì)把HTTP響應(yīng)返回給客戶端;
簡(jiǎn)單快速:客戶端向服務(wù)器請(qǐng)求時(shí),只需要傳遞簡(jiǎn)單的HTTP請(qǐng)求,服務(wù)器響應(yīng)時(shí)也只需要返回簡(jiǎn)單的HTTP響應(yīng)就可以了。而HTTP協(xié)議通信速度快,適用于分布式環(huán)境下的基于Hypermedia的系統(tǒng);
靈活:HTTP協(xié)議可以通過發(fā)送不同的請(qǐng)求方法、請(qǐng)求頭等讓服務(wù)器端做不同的處理;
無連接:客戶端發(fā)送請(qǐng)求后,服務(wù)器端響應(yīng)完該請(qǐng)求后就會(huì)斷開連接。HTTP服務(wù)器端需要很短的時(shí)間維護(hù)每個(gè)連接,而且它并不對(duì)客戶端發(fā)送請(qǐng)求的數(shù)量有所限制。這樣就可以更快地響應(yīng)用戶的請(qǐng)求。
二、Python實(shí)現(xiàn)HTTP請(qǐng)求
- requests庫(kù)
requests庫(kù)是Python實(shí)現(xiàn)HTTP請(qǐng)求的一個(gè)第三方庫(kù),它提供了一個(gè)更加簡(jiǎn)單的HTTP請(qǐng)求接口,簡(jiǎn)單易學(xué),非常適合做Web測(cè)試和爬蟲開發(fā)。
安裝方法:
pip install requests
使用方法:
import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(response.content.decode())
詳細(xì)解釋:
使用requests.get()函數(shù)發(fā)起GET請(qǐng)求,并將響應(yīng)對(duì)象存儲(chǔ)到response變量中;
調(diào)用響應(yīng)對(duì)象的content屬性獲取響應(yīng)內(nèi)容的字節(jié)流數(shù)據(jù),并使用decode()函數(shù)將其解碼成字符串類型;
輸出獲取到的響應(yīng)內(nèi)容
- urllib庫(kù)
urllib庫(kù)是Python自帶的HTTP請(qǐng)求庫(kù),也是Python實(shí)現(xiàn)HTTP請(qǐng)求的一種基礎(chǔ)方式,比較適合初學(xué)者學(xué)習(xí)使用。
使用方法:
import urllib.request
url = "http://www.baidu.com"
response = urllib.request.urlopen(url)
print(response.read().decode())
詳細(xì)解釋:
使用urllib.request.urlopen()函數(shù)發(fā)起GET請(qǐng)求,并將響應(yīng)對(duì)象存儲(chǔ)到response變量中;
調(diào)用響應(yīng)對(duì)象的read()函數(shù)獲取響應(yīng)內(nèi)容的字節(jié)流數(shù)據(jù),并使用decode()函數(shù)將其解碼成字符串類型;
輸出獲取到的響應(yīng)內(nèi)容。
三、Python實(shí)現(xiàn)HTTP服務(wù)器
在Python中實(shí)現(xiàn)HTTP服務(wù)器,可以使用內(nèi)置的http.server模塊,它提供了HTTP協(xié)議的處理和解析。
- 簡(jiǎn)單示例
下面是一個(gè)簡(jiǎn)單的例子,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的HTTP服務(wù)器,可以根據(jù)請(qǐng)求的不同返回不同的響應(yīng)內(nèi)容:
from http.server import SimpleHTTPRequestHandler, HTTPServer
class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.path = '/index.html'
return SimpleHTTPRequestHandler.do_GET(self)
if __name__ == '__main__':
server = HTTPServer(('', 8000), MyHTTPRequestHandler)
print('Serving HTTP on localhost port 8000...')
server.serve_forever()
詳細(xì)解釋:
創(chuàng)建一個(gè)繼承自SimpleHTTPRequestHandler類的子類,并重寫do_GET方法,通過判斷請(qǐng)求路徑來返回不同的響應(yīng)內(nèi)容;
在__main__函數(shù)中創(chuàng)建一個(gè)HTTPServer對(duì)象,指定服務(wù)器地址、端口和處理器;
調(diào)用HTTPServer對(duì)象的serve_forever方法,啟動(dòng)HTTP服務(wù)器,并指定服務(wù)狀態(tài)一直保持運(yùn)行。
- Flask框架示例
下面是一個(gè)使用Flask框架實(shí)現(xiàn)HTTP服務(wù)器的示例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def home():
return '<h1>Hello Flask!</h1>'
@app.route('/user/<name>')
def user(name):
return f'<h1>Hello,{name}!</h1>'
詳細(xì)解釋:文章來源:http://www.zghlxwxcb.cn/news/detail-759052.html
導(dǎo)入Flask框架,創(chuàng)建一個(gè)Flask對(duì)象實(shí)例,并通過__name__參數(shù)指定當(dāng)前模塊的名稱;
使用@app.route()裝飾器來定義路由和視圖函數(shù),通過return語句返回響應(yīng)內(nèi)容;
調(diào)用Flask對(duì)象實(shí)例的run方法,啟動(dòng)HTTP服務(wù)器。文章來源地址http://www.zghlxwxcb.cn/news/detail-759052.html
到了這里,關(guān)于python基于http的網(wǎng)絡(luò)通信和網(wǎng)站端口暴露;Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!