代理設定教學:由用戶名到爬蟲程式

只要明白用戶名每一部分的作用,在任何工具設定代理都只需幾分鐘。本頁逐一介紹各工具的設定方法、錯誤處理,以及如何保護你的令牌。

1. 建立帳戶並儲存存取令牌

在註冊頁面獲取存取令牌。令牌在登入和連接代理時都當作密碼使用。伺服器不儲存令牌,請儲存為 .txt 檔案。

2. 增值餘額

在控制台的增值區選擇金額並提交申請。$30 起即可增值,確認付款後計入餘額。

3. 生成用戶名稱

在用戶名稱中寫入國家、城市和會話,決定連接位置和 IP 保持方式。在控制台的生成連接資訊中選擇即可自動生成。

用戶名稱範例

每次請求新 IP
user-country-us
指定城市
user-country-us-city-new_york
保持同一 IP
user-country-us-session-shop1
流動 IP
user-type-mobile-country-us

4. 測試連接

用 curl 發送請求,查看回應中的 IP 和國家。

連接格式

HTTP

http://user-country-us:YOUR_TOKEN@gate.proxytoo.com:7000

SOCKS5

socks5://user-country-us:YOUR_TOKEN@gate.proxytoo.com:7000

curl

curl -x http://gate.proxytoo.com:7000 -U "user-country-us:YOUR_TOKEN" https://ipinfo.io/json

5. 接入你常用的工具

在 Python、Node.js 或瀏覽器自動化工具中填入地址、用戶名稱和令牌。

程式碼範例

Python (requests)

import requests

proxy = "http://user-country-us:YOUR_TOKEN@gate.proxytoo.com:7000"
res = requests.get("https://ipinfo.io/json",
                   proxies={"http": proxy, "https": proxy})
print(res.json())

Node.js (undici)

import { ProxyAgent, fetch } from "undici";

const agent = new ProxyAgent("http://user-country-us:YOUR_TOKEN@gate.proxytoo.com:7000");
const res = await fetch("https://ipinfo.io/json", { dispatcher: agent });
console.log(await res.json());

Puppeteer

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://gate.proxytoo.com:7000"],
});
const page = await browser.newPage();
await page.authenticate({ username: "user-country-us", password: "YOUR_TOKEN" });
await page.goto("https://ipinfo.io/json");

出現連接錯誤時

  • 407 Proxy Authentication Required

    用戶名稱或令牌不正確。請確認是否原樣粘貼,沒有多餘空格。

  • 連接逾時

    如果指定到了城市,請只指定國家再試。也請確認公司防火牆是否封鎖了 7000 端口。

  • 一直被網站封鎖

    請拉長請求間隔,並改為每次請求更換 IP 的方式發送。封鎖較強的網站適合住宅代理。

代理用戶名點樣看?

代理用戶名是一串簡短的設定字串,各部分以連字號連接。開頭是 user,之後加上一對對名稱和值,用來設定出口位置及 IP 保持多久。明白各部分後,毋須打開控制台,也可以自己寫出任何連接字串。

country 之後是兩個小楷字母的國家代碼。user-country-us 代表美國 IP,user-country-jp 代表日本 IP。city 之後是小楷的城市名稱,空格改為底線,例如 user-country-us-city-new_york。

session 之後是你自訂的會話名稱。使用 user-country-jp-session-shop1 時,所有用這個名稱的請求會在最長 120 分鐘內保持同一 IP。加上 type-mobile,例如 user-type-mobile-country-gb,就會經流動 IP 出口。

密碼欄一律填以 pt_ 開頭的存取令牌。要改位置或會話,只需修改用戶名,令牌保持不變。

  • user 表示設定由此開始。
  • country 加兩個字母的代碼用來選國家。
  • city 加以底線連接的名稱用來選城市。
  • session 加名稱可保持同一 IP。
  • type-mobile 用來選流動 IP。

HTTP 和 SOCKS5 代理,應該用邊個?

做網頁抓取和瀏覽器工作,HTTP 代理是最方便的預設選擇;非網頁流量,或想由代理端解析 DNS 的設定,則適合 SOCKS5 代理。ProxyToo 在同一個網關 gate.proxytoo.com:7000 同時支援兩者。用戶名和令牌不變,只需改地址前面的協議。

HTTP 代理本身就是為網頁請求而設,所以幾乎所有程式庫和瀏覽器都可以直接使用。HTTPS 網站同樣可用,因為代理會為連線建立加密通道。requests、Scrapy、Puppeteer、Playwright 等網頁工具,建議先用 HTTP 格式。

SOCKS5 轉發的是連線本身,所以除網頁外還可以傳送多種流量。在 Python 中,地址以 socks5h 開頭,代理就會在出口國家解析主機名稱,令你的位置保持一致。Chromium 系瀏覽器對帶用戶名的 SOCKS5 支援有限,所以瀏覽器自動化用 HTTP 會更順暢。

  • 網頁抓取和瀏覽器自動化用 HTTP
  • 會傳送非網頁流量的程式用 SOCKS5
  • 想在代理所在國家解析 DNS,用 socks5h 地址
  • 兩者用同一組用戶名和令牌

點樣在瀏覽器或防關聯瀏覽器加入代理?

一般瀏覽器可以打開代理擴充功能,在不同欄位分別輸入主機、端口、用戶名及令牌四個值。在控制台的「生成連接資訊」選擇 host:port:user:pass 格式,四個值會出現在同一行,方便逐欄複製。如果首次載入頁面時彈出驗證視窗,就在那裏輸入用戶名和令牌。

防關聯瀏覽器為每個設定檔提供獨立的瀏覽器環境,所以基本原則是每個設定檔用一個用戶名。在設定檔的代理欄位選擇 HTTP 或 SOCKS5,然後在用戶名加上會話部分,每個設定檔用不同的會話名稱。這樣每個設定檔都有自己的 IP,而同一設定檔內 IP 不會改變。

把設定檔的語言、時區和位置設成所選國家,頁面就會以當地訪客看到的樣子顯示。長時間經營同一帳戶的設定檔,用 ISP 代理或獨享數據中心代理,整個期限都會保持同一 IP。兩者都可以在控制台的「購買產品」選擇數量和期限下單。

  • 每個設定檔一個會話名稱
  • 語言和時區配合 IP 所在國家
  • 長期運行的設定檔用 ISP 代理
  • 在驗證視窗輸入用戶名和令牌

點樣在 Python requests 和 Scrapy 使用代理?

在 Python 中,把代理寫成 http://username:token@gate.proxytoo.com:7000 這樣的一行,再交給程式庫的代理設定。使用 requests 時,關鍵是在 http 和 https 兩個項目都填入同一地址。兩個項目都填好,HTTPS 請求亦會經代理發出。

在 requests 的 Session 物件設定一次代理,該會話內所有請求都會使用。每個請求想換新 IP 時,用只含國家的用戶名;登入這類需要延續的流程,就用帶會話部分的用戶名。如要用 SOCKS5,請為 requests 安裝 SOCKS 附加套件,並把地址開頭改為 socks5h。

在 Scrapy 中,把同樣格式的地址填入每個請求 meta 的 proxy 值,內置的代理中介軟件會自動把用戶名和令牌轉成驗證標頭。想把同一設定套用到所有請求,可以寫一個小型下載中介軟件來填入 proxy 值。想把流量分成多個會話,就讓這個中介軟件為每批請求分配不同的會話名稱。

用 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 等設定調整並行數量和節奏。先設低一點,確認回應穩定後再逐步提高,在速度和成功率之間取得平衡。住宅代理按使用流量收費,過濾圖片和字型可以令餘額用得更耐。

點樣在 Node.js、Puppeteer 和 Playwright 設定代理?

在 Node.js 中,常見做法是建立一個代理 agent,再交給請求程式庫。HTTP 可用 https-proxy-agent 或 undici 的 ProxyAgent 等套件,SOCKS5 則用 socks-proxy-agent,並傳入包含用戶名和令牌的地址。agent 只建立一次並在各請求中重用,連線可以重複使用,速度亦更快。

使用 Puppeteer 時,在 --proxy-server 啟動參數只填網關地址,打開頁面後再用 page.authenticate 另外傳送用戶名和令牌。這樣分開處理,是在 Chrome 中最穩定的設定。要轉換國家或會話,最簡單的方法是用新用戶名啟動另一個瀏覽器。

使用 Playwright 時,在 proxy 啟動選項設定 server、username 和 password,驗證一步完成。password 欄填你的存取令牌。亦可以只啟動一個瀏覽器,為每個 context 分配各自的代理,每個 context 配一個會話名稱,一個程式就可以同時運行多個 IP。

瀏覽器自動化每個頁面都會下載圖片、影片和字型,累積起來流量不少。用請求攔截封鎖不需要的資源,可以減少按 GB 收費的住宅代理和流動代理的開支。加上會話名稱,頁面載入期間 IP 保持穩定,頁面就能完整呈現。

輪換代理和黏性會話,邊個較適合爬取數據?

每頁獨立讀取的爬取工作,每個請求用新 IP;登入或購物車這類需要延續的流程,就用會話。沒有會話部分時,每個請求都會換 IP;有的話,同一名稱下 IP 保持不變。一個令牌兩樣都做得到,可以按工作的每個步驟選擇。

輪換模式適合頁面之間毫無關聯的工作,例如搜尋結果、產品列表和價格表。請求會平均分散到大量 IP,在網站看來就是許多訪客的普通流量。即使大規模爬取同一網站,拉開請求間隔亦可以保持穩定。

使用會話的竅門,是每個工作單位用獨立的會話名稱。如果要檢查五個網店帳戶,就命名為 shop1 至 shop5,每個帳戶各自保留 IP。把工作拆成可在會話時限內完成的短流程,整個流程都可以用同一個 IP。

如果整個月都需要同一 IP,ISP 代理或獨享數據中心代理最適合;需要大量 IP 又想單價低,共享數據中心代理或 IPv6 代理是不錯的選擇。流量大而國家混合亦無妨的工作,用每日 $37.58 的無限流量住宅代理,成本就容易預算。

  • 獨立頁面每個請求換新 IP
  • 登入和結帳流程保持同一會話名稱
  • 每個工作單位用不同會話名稱
  • 整月同一 IP 用 ISP 或獨享數據中心代理

點樣檢查代理 IP 及處理連線錯誤?

最快的檢查方法,是經代理向顯示 IP 的頁面發送請求,確認 IP 和國家與用戶名中的國家一致。在控制台的「生成連接資訊」選擇 curl 格式,就會得到現成的檢查指令,可直接貼到終端機。如果設定了會話,把同一指令執行兩三次,確認 IP 有否保持。

407 回應代表代理不接受你的憑證,通常是用戶名或令牌中有一個字元出錯。請確認令牌以 pt_ 開頭、複製時沒有夾帶空格或換行,以及用戶名以 user 開頭。如果一行地址中出現特殊字元,把它們作 URL 編碼就能解決。

403 或 429 這類回應來自網站本身,代表代理連線已成功,只是網站在留意請求速度或模式。拉開請求間隔、發送類似瀏覽器的標頭,並由會話改為每個請求換新 IP。

逾時多數是因為公司或學校網絡封鎖了網關端口、城市範圍太窄,或程式碼的逾時設定太短。試試在另一個網絡執行同一指令、移除城市部分只指定國家,並把請求的逾時設定加長。同時確認餘額仍有剩,以及 IP 產品的訂單在「我的訂單」中顯示為「使用中」。

  • 407:檢查用戶名和令牌
  • 403 或 429:放慢速度並輪換 IP
  • 逾時:檢查網絡、城市及逾時設定
  • 同一指令執行幾次以測試會話

點樣保護代理存取令牌?

存取令牌既是帳戶 ID,也是代理密碼,任何人拿到它都可以用你的餘額使用代理。伺服器只保存令牌的雜湊值,所以你在註冊時儲存的令牌檔案就是唯一的正本。請在兩個地方保存副本,並加入密碼管理工具,既安全又容易找到。

不要把令牌寫在程式碼中,改為從環境變數或獨立的設定檔讀取。把該設定檔加入 .gitignore,令它不會進入程式碼庫;在共用伺服器上,收緊檔案權限,只讓自己讀取。這樣就可以分享程式碼,而令牌只留在自己的電腦。

日誌和截圖亦要留意。出錯時印出完整代理地址,令牌就會直接寫入日誌,所以記錄地址時要遮蓋令牌部分。發問或分享截圖時,只顯示用戶名,並先刪去令牌。

  • 令牌檔案存放在兩個地方
  • 從環境變數讀取令牌
  • 設定檔不放入程式碼庫
  • 日誌和截圖中遮蓋令牌

負責任地使用代理

  • 只收集公開資訊,未經許可不登入他人的帳戶。
  • 拉開請求間隔,不給網站運營帶來負擔。
  • 不能用於發送垃圾資訊、未經授權的訪問、詐騙等用途。

獲取令牌,立即連接所需國家的 IP

只需一個令牌即可註冊。$30 起增值,一個餘額就能使用所有代理類型。

獲取令牌並開始