国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現代理服務功能實例

2020-02-23 04:56:17
字體:
來源:轉載
供稿:網友
代理服務原理很簡單,就拿瀏覽器與web服務器來說。無非是A瀏覽器
發request給B代理,B代理再把request把送給C web服務,然后C的reponse->B->A。
要寫web代理服務就要先了解下http協議,當然并不要多深入,除非要實現強大的功能:修改XX信息、
負載均衡等。http請求由三部分組成:請求行、消息報頭、請求正文;
詳細的網上有,想了解可以看看。下面是一個正常的GET請求頭(Cookie部分本人沒截屏,使用的系統w7):



可以看到首行:GET是請求方法, /是路徑,在后面是協議版本;第二行以后是請求報頭,都是鍵值對形式;
GET方法沒有正文。post有正文,除此之外,請求方法頭部基本一致,每一行結尾都是/r/n。
基本的請求方法,如下:

GET        請求獲取Request-URI所標識的資源
POST      在Request-URI所標識的資源后附加新的數據
HEAD      請求獲取由Request-URI所標識的資源的響應消息報頭
PUT         請求服務器存儲一個資源,并用Request-URI作為其標識
DELETE   請求服務器刪除Request-URI所標識的資源
TRACE     請求服務器回送收到的請求信息,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS  請求查詢服務器的性能,或者查詢與資源相關的選項和需求
但是使用代理后,從代理服務上得到的請求如下:


與第一張圖片對比一下,有什么不同......第一行的資源路徑不對。當瀏覽器上設置代理請求時把整個url都作為資源路徑了,所以我們要把域名刪掉,然后代理服務器在把修改后的請求發送給目標
web服務器。就這么簡單,當然CONNECT方法特別,要特別對待,所以先說其他方法。
基本的思路:
1、代理服務器運行監聽,當有客戶端瀏覽器請求到來時通過accept()獲得client句柄(或者叫描述符);
2、利用client描述符接收瀏覽器發來的request,分離出第一行為了修改第一行和獲得method,
要去掉的的部分,除去http://的部分用targetHost表示吧。
3、通過第2步能夠獲得方法method、request和targetHost,這一步可以根據不同的method做不同的處理,
由于GET、POET、PUT、DELETE等除了CONNECT處理基本一致,所以處理首行,比如:
代碼如下:
GET http://www.a.com/ HTTP/1.1
替換為
GET / HTTP/1.1

此時targetHost也就是紅色的部分,默認的請求80端口,此時port為80;如果targetHost中有端口(比如www.a.com:8081),
就要分理處端口,此時port為8081。然后根據targetHost和port連接到目標服務器target了,實現代碼如下:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林口县| 泾阳县| 五大连池市| 临沧市| 镇坪县| 青龙| 卫辉市| 旬阳县| 凤山县| 杂多县| 郓城县| 长垣县| 安泽县| 苏尼特左旗| 阳城县| 休宁县| 扎兰屯市| 宜春市| 呼玛县| 大厂| 北票市| 陆河县| 历史| 荥阳市| 凤翔县| 广州市| 始兴县| 溆浦县| 天门市| 平江县| 武穴市| 胶州市| 五莲县| 平潭县| 迭部县| 来宾市| 合江县| 遂宁市| 涪陵区| 宾川县| 石屏县|