国内代理ip怎么使用?提取接口+填入参数完整流程详解
做国内数据采集、电商比价、本地业务测试,或者需要模拟不同城市IP访问国内网站时,国内代理IP几乎是绕不开的基础设施。但很多开发者拿到代理IP之后,卡在”怎么真正用起来”这一步——接口怎么调、参数怎么填、代码怎么改,每一步都有细节。
这篇文章把从提取接口到参数填入的完整流程拆成可操作的步骤,配合 Python 和 Java 代码示例,让你看完就能跑通。
一、先搞清楚:国内代理IP的两种交付形态
国内代理IP在交付上通常有两种形式,决定了你后续”提取”的方式不同:
| 形态 | 说明 | 适用场景 |
|---|---|---|
| 静态IP列表 | 后台直接展示固定IP,手动复制 | 长期绑定、白名单对接 |
| 动态API提取 | 通过HTTP接口实时获取一批代理 | 爬虫轮换、高频请求、弹性扩容 |
本文重点讲动态API提取,因为这是绝大多数自动化场景下的标准用法。以光络云国内代理产品为例,你登录后在控制台可以拿到专属的提取API地址和密钥,后续所有代理都通过这个接口实时拉取。
二、提取接口:完整调用流程
Step 1:登录后台,拿到API信息
登录光络云控制台,进入「国内代理」→「API提取」页面,你会看到类似这样的信息:
提取接口地址:http://api.ipipgo.com/get?num=20&port=8080&protocol=http®ion=guangdong&sess=10
认证方式: 用户名 + 密码(或API Key)
几个核心参数先记一下:
- num:一次提取的IP数量(如 20 个)
- port:代理端口(如 8080)
- protocol:协议类型,
http或socks5 - region:指定省份/城市(可选,不填则随机)
- sess:会话保持时长(分钟),同一sess内返回相同IP
Step 2:发起GET请求提取代理
用任意HTTP客户端请求上述地址,返回格式一般是纯文本,每行一个 IP:端口:
120.85.xx.xx:8080
14.17.xx.xx:8080
58.250.xx.xx:8080
...(共num行)
Python 示例:
import requests
def get_proxies(num=20, region="guangdong"):
url = (
"http://api.ipipgo.com/get"
f"?num={num}&port=8080&protocol=http"
f"®ion={region}&sess=10"
)
headers = {
"Authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" # 你的认证信息
}
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status()
# 每行一个 IP:port
return [line.strip() for line in resp.text.strip().splitlines() if line.strip()]
proxies = get_proxies(num=10)
print(f"成功提取 {len(proxies)} 个国内代理IP")
for p in proxies[:3]:
print(p)
Step 3:解析并校验
拿到IP列表后,建议做一轮快速连通性校验,剔除不可用的节点:
from concurrent.futures import ThreadPoolExecutor
def check_proxy(proxy: str) -> bool:
try:
r = requests.get(
"http://httpbin.org/ip",
proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
timeout=5
)
return r.status_code == 200
except Exception:
return False
# 并发校验,保留可用IP
with ThreadPoolExecutor(max_workers=10) as pool:
results = list(pool.map(check_proxy, proxies))
valid_proxies = [p for p, ok in zip(proxies, results) if ok]
print(f"可用代理:{len(valid_proxies)}/{len(proxies)}")
三、填入参数:把代理写进你的代码
提取到可用IP后,下一步就是把它填入你的业务代码。不同语言和框架的写法不同,核心逻辑一致:指定协议 + 填入IP:端口 + 配置认证(如有)。
Python:requests 库
import requests
proxy = "120.85.xx.xx:8080" # 从提取接口拿到的
# 方式一:单请求
resp = requests.get(
"https://www.example.com/data",
proxies={
"http": f"http://{proxy}",
"https": f"http://{proxy}",
},
timeout=10
)
print(resp.status_code)
# 方式二:Session 复用(推荐)
session = requests.Session()
session.proxies = {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
}
# 如果代理需要认证:
# session.proxies["http"] = f"http://user:pass@{proxy}"
for _ in range(5):
r = session.get("https://www.example.com/page")
print(r.status_code, r.text[:50])
Python:Scrapy 爬虫框架
# settings.py
HTTP_PROXY = "http://120.85.xx.xx:8080"
HTTPS_PROXY = "http://120.85.xx.xx:8080"
# 如果需要轮换,用中间件动态设置
# middlewares/proxy_middleware.py
import random
class RotatingProxyMiddleware:
def __init__(self, proxy_pool):
self.proxy_pool = proxy_pool # 从提取接口加载的列表
def process_request(self, request, spider):
proxy = random.choice(self.proxy_pool)
request.meta["proxy"] = f"http://{proxy}"
Java:HttpURLConnection / OkHttp
// OkHttp 示例
import okhttp3.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
String host = "120.85.xx.xx";
int port = 8080;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
OkHttpClient client = new OkHttpClient.Builder()
.proxy(proxy)
.connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS)
.readTimeout(15, java.util.concurrent.TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url("https://www.example.com/data")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.code());
response.close();
Node.js:axios / http 模块
const axios = require("axios");
const proxyAgent = require("proxy-agent");
const agent = proxyAgent(`http://120.85.xx.xx:8080`);
const res = await axios.get("https://www.example.com/data", {
httpAgent: agent,
httpsAgent: agent,
timeout: 10000,
});
console.log(res.status);
四、进阶:让代理IP真正”好用”的几个细节
很多开发者填完参数就跑,结果遇到IP被封、请求超时、数据重复等问题。以下是几个实操中踩坑后总结的要点:
1. 会话保持(sess参数)
如果你需要”同一个用户”连续访问多个页面,提取时加上 &sess=30,30分钟内同一sess返回相同IP,模拟真实用户行为,避免频繁换IP触发风控。
2. 超时参数别偷懒
国内代理一般延迟在 20-80ms,但网络波动时可能飙到 2-3 秒。建议 连接超时 5-10秒、读取超时 15-30秒,别用默认的 60 秒,否则一个慢节点会拖垮整个请求队列。
3. 失败自动切换
单个代理挂了不要卡死,写一个重试逻辑:当前代理失败 → 从池里取下一个 → 重试。一般重试 2-3 次后放弃该任务,记录日志。
4. 按地区提取
如果你的业务需要”广东IP访问广东本地服务”,提取时指定 ®ion=guangdong 或 ®ion=shenzhen,确保IP归属地正确。
5. 定期刷新代理池
动态代理有生命周期,建议每 5-10 分钟重新调用一次提取接口,用新IP替换池中的旧IP,保持整体可用率。
五、光络云国内代理:开箱即用的API体验
如果你正在找一款国内节点稳定、API接口简洁的代理服务,光络云的国内代理产品值得考虑。几个核心优势:
- 节点覆盖广:国内多省份节点可选,支持按省/市粒度提取,满足本地化访问需求
- API即开即用:注册后控制台直接生成提取接口,无需复杂配置,GET请求即返回IP列表
- 弹性扩容:num参数灵活调整,从 1 个到上千个IP一次提取,适配不同并发规模
- 会话保持:内置sess机制,天然支持”同用户同IP”场景,减少风控触发
- 按量计费:用多少算多少,没有最低消费门槛,适合中小项目起步
在控制台完成购买后,你会直接看到提取API地址和认证信息,复制进代码就能跑,不需要额外的SDK或客户端安装。
常见问题
Q: 国内代理IP和海外代理IP在使用方式上有区别吗?
接口调用和参数填入的方式基本一致,核心区别在于网络环境要求。光络云的海外代理IP需要你的服务器本身具备海外网络出口才能正常连接;而国内代理IP的节点在国内,你的服务器在国内直接调用即可,无需额外的网络环境。
Q: 提取的IP是固定的还是每次都不一样?
默认情况下,每次调用提取接口会返回一批动态IP,不同请求可能拿到不同IP。如果你需要固定IP,可以在控制台选择静态IP套餐,或者在提取参数中指定 sess 值实现短时会话保持。
Q: 代理IP被封了怎么办?
先确认是目标网站封了IP还是代理本身不通。如果代理不通,重新提取一批即可;如果是目标网站风控,建议降低请求频率、增加随机延迟、使用sess保持会话一致性。光络云国内节点池较大,重新提取通常能拿到新IP。
Q: 支持SOCKS5协议吗?
支持。提取接口中 protocol 参数填 socks5 即可。代码中代理前缀改为 socks5://IP:端口,Python 的 requests 需要额外安装 PySocks 库(pip install pysocks)。
Q: 一次最多能提取多少个IP?
num参数的上限取决于你购买的套餐规格。在控制台可以看到当前套餐支持的最大单次提取数量。如果业务需要更大并发,可以联系光络云客服确认扩容方案。
