国产探花免费观看_亚洲丰满少妇自慰呻吟_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了,實現代碼如下:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汶川县| 玛纳斯县| 锦屏县| 和静县| 时尚| 武威市| 浪卡子县| 临高县| 昂仁县| 阿鲁科尔沁旗| 赤城县| 高雄市| 南木林县| 曲松县| 历史| 宜都市| 巴林右旗| 泗水县| 喀喇沁旗| 临湘市| 碌曲县| 江门市| 彭州市| 冀州市| 藁城市| 岱山县| 彩票| 通辽市| 阜宁县| 扎赉特旗| 宜章县| 苏州市| 永和县| 友谊县| 红安县| 理塘县| 星座| 丁青县| 江陵县| 宣威市| 扶绥县|