隧道住宅代理接入手册
通过固定住宅网关接入 8000 万+住宅 IP。默认全球随机,也可在提取时指定国家或地区,并用 SESSION 尽量保持同一出口。
使用控制台生成的完整用户名
示例已固定使用住宅网关 residential.123proxy.cn:33000。在控制台完成国家、SESSION 和认证配置后,只需填写代理账密;PROXY_USER 必须使用完整路由用户名。
export PROXY_USER="YOUR_PROXY_USER"
export PROXY_PASS="YOUR_PROXY_PASSWORD"
curl --fail-with-body --silent --show-error \
--proxy "http://residential.123proxy.cn:33000" \
--proxy-user "${PROXY_USER}:${PROXY_PASS}" \
--connect-timeout 15 \
--max-time 30 \
"https://api.ipify.org?format=json"import os
import requests
host = "residential.123proxy.cn"
port = 33000
username = os.environ["PROXY_USER"]
password = os.environ["PROXY_PASS"]
proxy_url = f"http://{username}:{password}@{host}:{port}"
proxies = {"http": proxy_url, "https": proxy_url}
response = requests.get(
"https://api.ipify.org?format=json",
proxies=proxies,
timeout=(15, 30),
)
response.raise_for_status()
print(response.json())// npm install axios
const axios = require("axios");
const response = await axios.get(
"https://api.ipify.org?format=json",
{
proxy: {
protocol: "http",
host: "residential.123proxy.cn",
port: 33000,
auth: {
username: process.env.PROXY_USER,
password: process.env.PROXY_PASS,
},
},
timeout: 30000,
},
);
console.log(response.data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"time"
)
func main() {
proxyURL := &url.URL{
Scheme: "http",
Host: "residential.123proxy.cn:33000",
User: url.UserPassword(os.Getenv("PROXY_USER"), os.Getenv("PROXY_PASS")),
}
client := &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
Timeout: 30 * time.Second,
}
response, err := client.Get("https://api.ipify.org?format=json")
if err != nil { panic(err) }
defer response.Body.Close()
if response.StatusCode >= 400 { panic(response.Status) }
body, err := io.ReadAll(response.Body)
if err != nil { panic(err) }
fmt.Println(string(body))
}import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ProxyCheck {
public static void main(String[] args) throws Exception {
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
String host = "residential.123proxy.cn";
int port = 33000;
String user = System.getenv("PROXY_USER");
char[] password = System.getenv("PROXY_PASS").toCharArray();
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(new InetSocketAddress(host, port)))
.authenticator(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
})
.connectTimeout(Duration.ofSeconds(15))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.ipify.org?format=json"))
.timeout(Duration.ofSeconds(30))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
if (response.statusCode() >= 400) throw new RuntimeException(response.body());
System.out.println(response.body());
}
}<?php
$host = "residential.123proxy.cn";
$port = 33000;
$user = getenv("PROXY_USER");
$password = getenv("PROXY_PASS");
$curl = curl_init("https://api.ipify.org?format=json");
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_PROXY => $host,
CURLOPT_PROXYPORT => (int) $port,
CURLOPT_PROXYUSERPWD => $user . ":" . $password,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec($curl);
if ($body === false) {
throw new RuntimeException(curl_error($curl));
}
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);
if ($status >= 400) throw new RuntimeException($body);
echo $body . PHP_EOL;
主机始终为 residential.123proxy.cn,端口始终为 33000。国家与 SESSION 由完整认证用户名控制。
国家在提取代理时选择
购买流量套餐时不锁定地区。每次生成代理时决定全球随机、欧洲随机或具体国家;具体国家使用小写国家码,并始终放在认证用户名最后。
认证用户名不添加国家后缀,从全球住宅池随机选择出口。
例如美国添加 +us,日本添加 +jp,国家码必须为小写。
首次生成或修改国家、SESSION 后,通常需要约 3–15 分钟同步。
前者是路由配置同步时间;SESSION 时长是你设置的 1–120 分钟粘性窗口,两者互不替代。
认证用户名的固定拼接顺序
账密认证的顺序固定为:基础代理用户 → SESSION(可选)→ 国家码(可选且必须在最后)。
proxy-user-sess_a8F3kP9xQ2mL_15+us
全球随机轮转proxy-user美国轮转proxy-user+us美国 Stickyproxy-user-sess_a8F3kP9xQ2mL_15+us全球 Stickyproxy-user-sess_a8F3kP9xQ2mL_15什么时候使用 SESSION
默认模式下,新请求会进入轮转逻辑。分页、短流程或多步骤请求需要尽量保持同一住宅出口时,再启用 Sticky SESSION。
只使用英文字母和数字。复用同一个 ID 才会复用同一条粘性路由。
时长到期或出口不可用后,系统会重新分配住宅 IP。
修改 SESSION ID,或切回每次请求轮转模式。
账密认证与套餐 IP 白名单
程序发送完整路由用户名与代理密码,国家码和 SESSION 都能直接从用户名看出。
HOST:PORT:ROUTED_USER:PASSWORD白名单绑定当前套餐。程序只使用 HOST:PORT,国家和 SESSION 由控制台保存为套餐路由。
HOST:PORT白名单输入时每行一个公网 IPv4;保存到后端时会转为英文逗号分隔。更换采集服务器后需更新当前套餐白名单。
只按实际代理流量使用
代理输出格式
控制台可按工具需要输出四种文本顺序。使用账密认证时,用户名必须保留完整的 SESSION 和国家后缀。
txt_type=1HOST:PORT:USER:PASSWORDtxt_type=2HOST:PORT@USER:PASSWORDtxt_type=3USER:PASSWORD:HOST:PORTtxt_type=4USER:PASSWORD@HOST:PORT生产使用建议
常见问题
国家码应该放在哪里?
国家码必须为小写并放在完整认证用户名最后。例如美国为 proxy-user+us,带 SESSION 时为 proxy-user-sess_12位ID_15+us。
设置国家后为什么没有立即变化?
首次生成或修改国家、SESSION 后通常需要约 3–15 分钟同步。等待后重新建立连接,不要复用旧连接池验证。
白名单模式还需要发送国家码吗?
不需要在程序中发送用户名。国家与 SESSION 会由控制台保存到当前套餐路由,程序只连接生成的 HOST:PORT。
它是否支持并发线程不限流量?
不支持。隧道住宅代理仅按实际传输流量使用;需要并发线程套餐应选择隧道代理。