代理設定指南:如何連接住宅代理
本指南帶你由新建立的ProxyMay帳戶,到經 gate.proxymay.com:7000 閘道發出第一個請求。了解用戶名稱規則後,只需修改一個字串,就可以轉換國家、城市及固定連線階段。
01
建立帳戶並保存存取令牌
在註冊頁面建立帳戶,你會收到一個格式為 pm_XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX 的存取令牌。同一個令牌既用於登入網站,亦是你的代理密碼。
伺服器只保存令牌的雜湊值及最後4個字元。離開頁面前,請將令牌保存在密碼管理工具或其他安全的地方。
令牌遺失後無法取回。在程式碼內請由環境變數讀取令牌,避免令牌出現在儲存庫內。
每個IP地址最多可建立3個帳戶,登入每10分鐘可嘗試10次。
02
為餘額增值並揀選產品
代理從你的餘額扣款,所以請先增值。一個餘額可用於動態住宅代理、靜態ISP代理、數據中心代理及流動代理。
動態住宅流量$0.80/GB起,流動流量$4.00/GB起,按實際用量收費。例如在動態住宅花費$100,可得的流量為$100除以$0.80/GB。增值金額及贈送請看收費頁面。
03
組合代理用戶名稱:國家、城市及連線階段
用戶名稱以 user 開頭,再以 - 連接可選部分。密碼永遠是你的存取令牌。如果不加任何部分,你會取得不指定國家的動態住宅IP。
| 部分 | 意思 | 例子 |
|---|---|---|
| type-mobile | 使用電訊商流動網絡上的IP | 例:user-type-mobile-country-de |
| country-xx | 兩個字母的國家代碼 | user-country-jp |
| city-name | 城市用小寫,空格用 _ | 例:user-country-us-city-new_york |
| session-name | 字母及數字,最多16個;同一名稱保持同一IP | 例:user-country-jp-session-shop1 |
按類型、國家、城市、連線階段的次序書寫,會較容易閱讀。user-country-jp-city-tokyo-session-shop1 即是以連線階段名稱shop1保持的東京IP。
流動代理只可按國家指定,所以使用 type-mobile 時請不要加入城市。國家代碼及城市列表請看覆蓋地區頁面。
04
HTTP及SOCKS5連線格式,以及curl IP檢查
HTTP及SOCKS5共用同一主機 gate.proxymay.com 及連接埠 7000。請從以下三種格式中揀選你的工具接受的一種。
http://user-country-jp:[email protected]:7000
socks5://user-country-jp:[email protected]:7000
gate.proxymay.com:7000:user-country-jp:YOUR_TOKEN控制台會為你產生相同的字串供複製。首兩行是網址格式;最後一行適用於要求host:port:user:password的工具。
撰寫程式碼前,先在終端機測試,可以很快找出問題所在。請檢查回應中的ip、country及city是否與你的用戶名稱相符。
curl -x http://user-country-us:[email protected]:7000 https://ipinfo.io/json
# Same check over SOCKS5
curl -x socks5h://user-country-us:[email protected]:7000 https://ipinfo.io/json使用socks5h時,DNS查詢亦會經過代理。
05
在Python requests及Scrapy中使用代理
在requests中,請在proxies字典的http及https下放入同一網址。這個例子以連線階段shop1保持日本IP。
import requests
proxy = "http://user-country-jp-session-shop1:[email protected]:7000"
proxies = {"http": proxy, "https": proxy}
r = requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30)
print(r.status_code, r.json())使用SOCKS5時,請執行 pip install requests[socks],並將通訊協定改為socks5h://。
在Scrapy中,於請求的meta設定proxy,內建中介軟件就會處理驗證。如果想每頁使用不同IP,請為每個請求設定各自的連線階段名稱。
import scrapy
class IpSpider(scrapy.Spider):
name = "ipcheck"
def start_requests(self):
proxy = "http://user-country-gb:[email protected]:7000"
yield scrapy.Request("https://ipinfo.io/json", meta={"proxy": proxy})
def parse(self, response):
yield response.json()06
Node.js代理例子
在Node.js 18或以上版本,將undici的ProxyAgent作為fetch的dispatcher傳入。如果使用axios,請將同一網址交給https-proxy-agent套件。
// npm install undici
import { ProxyAgent, fetch } from "undici";
const agent = new ProxyAgent("http://user-country-de:[email protected]:7000");
const res = await fetch("https://ipinfo.io/json", { dispatcher: agent });
console.log(await res.json());07
Playwright及Puppeteer瀏覽器代理設定
瀏覽器自動化工具會分開接收伺服器及登入資料。請將指定部分放在用戶名稱,令牌放在密碼。
// Playwright
const { chromium } = require("playwright");
const browser = await chromium.launch({
proxy: {
server: "http://gate.proxymay.com:7000",
username: "user-country-fr-city-paris-session-web1",
password: "YOUR_TOKEN",
},
});
const page = await browser.newPage();
await page.goto("https://ipinfo.io/json");
// Puppeteer
const browser2 = await puppeteer.launch({ args: ["--proxy-server=http://gate.proxymay.com:7000"] });
const page2 = await browser2.newPage();
await page2.authenticate({ username: "user-country-fr", password: "YOUR_TOKEN" });需要保持登入的工作,請加上連線階段名稱,讓每個頁面都由同一IP開啟。
08
何時應輪換IP,何時應使用固定連線階段?
沒有連線階段部分時,每個請求都會取得新IP。這適合排名查詢或價格收集等互相獨立的請求。
登入、購物車及多步驟流程可能在IP改變時中斷。請加上 session-name,將同一IP保持最長120分鐘。
- 每項工作用各自的連線階段名稱(例如cart1、cart2)。
- 要轉換IP,只需更改連線階段名稱。
- 如果需要整個月使用同一IP,靜態ISP代理會更合適。
09
解決代理連線錯誤
- 407 Proxy Authentication Required:用戶名稱格式或令牌錯誤。請檢查是否以user開頭、各部分是否以 - 分隔,以及令牌有沒有多餘空格。
- 連線被拒絕或逾時:請再檢查主機 gate.proxymay.com 及連接埠 7000,並確認防火牆沒有封鎖連往該連接埠的對外連線。亦請確認你仍有餘額。
- 顯示錯誤的國家:請檢查國家代碼是否兩個字母,以及城市是否小寫並使用 _。先執行curl檢查,再查看程式碼內有沒有快取或其他代理設定。
- 連線階段在120分鐘後改變:這是正常的,因為固定連線階段最長為120分鐘。請將工作分拆以配合這段時間,或以新的連線階段名稱重新開始。
更多解答已整理在常見問題。
10
負責任地使用代理
請將ProxyMay用於收集公開數據、廣告驗證、SEO排名查詢、價格監察、網站及本地化測試,以及管理自己的帳戶。禁止未經授權登入他人帳戶、垃圾訊息、詐騙、攻擊、非法內容,以及任何違法或侵犯目標網站權利的行為。
控制請求節奏並尊重各網站的規則,亦能讓你的工作順利運作。完整規則請看服務條款。