搭建代理的一個小坑之HTTP與HTTPS的使用


————————————————————————————————————————

代理的作用與原理

代理服務器在寫爬蟲的時候會經常用到,主要作用有隱藏真實IP和提高訪問速度等。其原理是這樣一回事:形象地說,它是網絡信息的中轉站。在我們正常請求一個網站時,是發送了請求給Web服務器,Web服務器把響應傳回給我們。如果設置了代理服務器,實際上就是在本機和服務器之間搭建了一個橋,此時本機不是直接向Web服務器發起請求,而是向代理服務器發出請求,請求會發送給代理服務器,然後由代理服務器再發送給Web服務器,接着由代理服務器再把Web服務器返回的響應轉發給本機。這樣我們同樣可以正常訪問網頁,但這個過程中Web服務器識別出的真實IP就不再是我們本機的IP了,就成功實現了IP僞裝,這就是代理的基本原理。

本地搭建代理

from urllib.error import URLError
from urllib.request import ProxyHandler,build_opener

proxy_handler = ProxyHandler({
    'http':'http://127.0.0.1:63342',
    #'https':'https//127.0.0.1:63342'
})
opener = build_opener(proxy_handler)

try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

這裏使用了ProxyHandler,其參數是一個字典,鍵名是協議類型(比如HTTP或者HTTPS等),鍵值是代理鏈接,可以添加多個代理。
然後,利用這個Handler及build_opener()方法構造一個Opener,之後發送請求即可。

一個小坑

上述代碼中https參數部分容易被新手忽略,因爲這裏是本地代理服務器,而你的本地服務器並沒有取得SSl證書,也就並沒有https協議(https是http的一個安全版本)。如果上面並沒有註釋的話(http和https兩個參數同時存在)就會報錯“Tunnel connection failed: 404 Not Found”,如下:
404
註釋掉https參數就可以,如:

#'https':'https//127.0.0.1:63342'

端口未打開報錯

“[WinError 10061] 由於目標計算機積極拒絕,無法連接。”如下:
端口報錯
報錯原因:9743端口在我們的電腦並沒有開放(因每個人的電腦而異),以至於無法對外進行連接。
如何查詢端口在個人電腦是否開放?

查看端口信息狀態

補個知識
快捷鍵“win+R”打開cmd,鍵入

netstat -ano

然後可以得到以下圖片的ip和端口信息:
在這裏插入圖片描述
LISTENING爲電腦已經開放了的監聽端口。
查看指定端口的佔用情況:
以上面搭建的端口(63342)爲例

netstat -aon|findstr "63342"

在這裏插入圖片描述
可以看到“63342”端口被進程號爲18220的進程所佔用,我們可以根據進程號查看多應的進程。

tasklist|findstr “18220”

在這裏插入圖片描述
可以看到是我剛剛進行連接的pycharm佔用了改端口。
如果我們不想它佔用就把改程序kill了以結束該進程:

taskkill /f /t /im pycharm64.exe

(我這裏就不演示結束進程了,懶得再開了,哈哈哈!)

服務器代理

剛剛演示的是是用我的主機搭建本地服務器代理,現在我用的自己的服務器進行代理,在這我的服務器是已經取得了SSL證書了,即可以使用https參數。
在這裏插入圖片描述

一個程序員雜談公衆號,歡迎關注。
在這裏插入圖片描述

有不足之處望留言指正

——————END——————
Programmer:柘月十七

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章