1、代理的瞭解
在上圖中我們可以把Web server看成是Google伺服器,正常情況下在國內是無法訪問Google伺服器的,這個時候就需要使用代理軟體,幫助我們傳送請求來訪問Google伺服器。然後再通過代理軟體把Google伺服器響應的結果返回給我們的瀏覽器,這個代理軟體就起到了一個代理的作用,幫助我們傳送請求,幫助我們接收響應。
2、代理的分類
正常情況下,我們使用瀏覽器來訪問百度伺服器,可以正常的直接的進行訪問。
(1)正向代理
正向代理類似一個跳板機,代理訪問外部資源。
比如我們國內訪問谷歌,直接訪問訪問不到,我們可以通過一個正向代理伺服器,將請求發到代理伺服器,代理伺服器能夠訪問谷歌,這樣由代理取到谷歌伺服器返回的資料,再返回給我們,這樣我們就能訪問谷歌了。
(2)反向代理
反向代理(Reverse Proxy)實際執行方式是指,以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果,返回給Internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。
(3)總結
- 正向代理即是客戶端代理, 代理客戶端, 服務端不知道實際發起請求的客戶端。
- 反向代理即是服務端代理, 代理服務端, 客戶端不知道實際提供服務的服務端。
形象的描述:
- 正向代理: 找黃牛買票。
- 反向代理: 租房的中介。
3、Requests庫使用代理
只需要新增proxies
引數即可,接收字典格式的引數。
示例:
# 1.匯入requests庫
import requests
# 明確要訪問的url地址
url = "https://ip.tool.chinaz.com/"
# 明確請求頭資訊
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",
}
# 設定代理伺服器地址
# 如果傳送的是http請求,就使用http請求的代理,如果傳送的是https請求,就使用一個https請求的代理。
proxies = {"https": "https://58.220.95.86:9401", "http": "http://113.214.13.1:1080"}
# 傳送請求
response = requests.get(url=url, headers=headers, proxies=proxies)
# 檢視響應結果的狀態碼
print(response.status_code)
# 獲得響應結果的原始碼
print(response.text)
說明一下:
訪問
url = "https://ip.tool.chinaz.com/"
這個地址的並不是我們自己的IP地址,而是proxies
屬性中定義的IP地址。實際上我們把請求傳送給代理伺服器,代理伺服器幫我們訪問了上面的網址。
驗證一下:
https://ip.tool.chinaz.com/
是一個檢查IP地址的網站。- 通過執行上面的示例,看看
response.text
返回的請求原始碼中的IP地址資訊。
在返回的原始碼中,是可以定位到如下資訊的,證明我們上面使用的代理成功了。<div class="WhwtdWrap bor-b1s col-gray03" style="height:auto"> <span class="Whwtdhalf w15-0 lh45">58.220.95.86</span> <span class="Whwtdhalf w15-0 lh45" style="cursor:pointer;" onclick="AiWenIpData('58.220.95.86')">58.220.95.86</span> <span class="Whwtdhalf w15-0 lh45">987520854</span> <span class="Whwtdhalf w30-0 lh24 tl ml80"> <p>江蘇省揚州市電信</p> </span> </div>
- 尋找代理伺服器請參考:
https://proxy.mimvp.com/freeopen
。
4、總結
為什麼需要使用代理?
- 讓伺服器以為不是同一個客戶端在請求。
- 防止我們的真實地址被洩露。
這裡我們就知道Requests庫中
proxies
代理如何使用,瞭解其原理就可以了。