5 分钟完成第一个代理请求
从控制台生成一组代理接入信息,先用 cURL 验证,再复制到 Python、Scrapy 或其他采集程序。
123Proxy 提供代理 IP 服务,不提供 VPN 或翻墙功能。开始前请准备可访问目标站点的海外服务器或计算环境。
在控制台生成代理
购买或领取测试套餐后,进入对应代理产品,点击“提取代理”,再按产品选择认证、协议、地区与轮转方式。
- 1选择可用套餐
所有配置都会绑定当前套餐;白名单不是全账户共享。
- 2选择认证方式
本地调试推荐账密认证;固定出口服务器可以使用套餐 IP 白名单。
- 3选择协议和路由
根据程序选择 HTTP(S) 或 SOCKS5,再设置地区、SESSION 或端口轮转。
- 4生成并复制代理账密
代码示例已写入对应产品的固定网关,只需复制代理用户名和密码,不要使用网站登录密码。
理解代理认证
代理认证凭证与 123Proxy 网站登录账号完全不同。账密认证由代理用户提供;IP 白名单则验证发起请求的服务器公网 IPv4。
静态类代理不支持白名单;隧道代理的纯住宅 SESSION 只支持账密认证。具体选项以对应产品提取页为准。
先用 cURL 验证代理
代码已使用隧道代理固定网关 proxy.123proxy.cn:36923。只需将控制台生成的代理用户名和密码写入环境变量,成功后应返回代理出口 IP,而不是采集服务器自身 IP。
export PROXY_USER="YOUR_PROXY_USER"
export PROXY_PASS="YOUR_PROXY_PASSWORD"
curl --fail-with-body --silent --show-error \
--proxy "http://proxy.123proxy.cn:36923" \
--proxy-user "${PROXY_USER}:${PROXY_PASS}" \
--connect-timeout 15 \
--max-time 30 \
"https://api.ipify.org?format=json"python -m pip install "requests[socks]"
export PROXY_URL="socks5h://YOUR_PROXY_USER:YOUR_PROXY_PASSWORD@proxy.123proxy.cn:36923"
python - <<'PY'
import os
import requests
proxy = os.environ["PROXY_URL"]
response = requests.get(
"https://api.ipify.org?format=json",
proxies={"http": proxy, "https": proxy},
timeout=(15, 30),
)
response.raise_for_status()
print(response.json())
PY
{"ip": "代理出口 IP"}
测试地址由第三方提供,只用于验证出口。生产代码应替换为依法可访问的真实目标 URL。
复制到采集代码
示例使用环境变量保存凭证,并分别设置连接与读取超时。生产任务还应加入退避重试、目标站点并发限制和响应校验。
export PROXY_USER="YOUR_PROXY_USER"
export PROXY_PASS="YOUR_PROXY_PASSWORD"
curl --fail-with-body --silent --show-error \
--proxy "http://proxy.123proxy.cn:36923" \
--proxy-user "${PROXY_USER}:${PROXY_PASS}" \
--connect-timeout 15 \
--max-time 30 \
"https://api.ipify.org?format=json"import os
import requests
host = "proxy.123proxy.cn"
port = 36923
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: "proxy.123proxy.cn",
port: 36923,
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: "proxy.123proxy.cn:36923",
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 = "proxy.123proxy.cn";
int port = 36923;
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 = "proxy.123proxy.cn";
$port = 36923;
$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;# settings.py
HTTPPROXY_ENABLED = True
DOWNLOAD_TIMEOUT = 30
RETRY_TIMES = 3
# spider.py
import os
import scrapy
from urllib.parse import quote
user = quote(os.environ["PROXY_USER"], safe="")
password = quote(os.environ["PROXY_PASS"], safe="")
host = "proxy.123proxy.cn"
port = 36923
proxy = f"http://{user}:{password}@{host}:{port}"
yield scrapy.Request(
"https://api.ipify.org?format=json",
meta={"proxy": proxy},
)# python -m pip install playwright
# playwright install chromium
import asyncio
import os
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as playwright:
browser = await playwright.chromium.launch(
proxy={
"server": "http://proxy.123proxy.cn:36923",
"username": os.environ["PROXY_USER"],
"password": os.environ["PROXY_PASS"],
}
)
page = await browser.new_page()
await page.goto(
"https://api.ipify.org?format=json",
wait_until="domcontentloaded",
timeout=30000,
)
print(await page.text_content("body"))
await browser.close()
asyncio.run(main())
代理用户名和密码应保存在环境变量或密钥管理服务中,不要写入公开代码仓库、镜像或日志。
HTTP(S) 与 SOCKS5 怎么选
最常见的网页与 API 请求方式。HTTPS 目标通常通过 HTTP CONNECT 建立隧道。
适合支持 SOCKS 的客户端。建议使用远端 DNS 解析,例如 Python 中的 socks5h://。
没有明确需求时先使用 HTTP(S),确认代理链路后再调整协议和连接池。
常见错误快速排查
407 Proxy Authentication Required
确认使用代理用户而不是网站登录账号;检查用户名中的 SESSION 与国家后缀顺序;白名单模式确认服务器公网 IPv4 已保存到当前套餐。
连接超时或无法连接代理主机
检查 HOST、PORT、协议和海外服务器网络;先用命令行测试,再检查防火墙、DNS 和客户端连接池。
代理可用,但目标站点返回 403 / 429
这通常是目标站点响应。降低单站点并发,读取 Retry-After,检查请求头、账号状态、访问授权和目标服务条款。
设置地区或 SESSION 后没有立即变化
部分住宅路由配置通常需要约 3-15 分钟同步。等待后重新建立连接,并通过出口查询或真实目标验证。