圆海博客-探寻心灵的宁静

您现在的位置是:首页 > 博客 > 正文

博客

国内代理ip怎么使用?提取接口+填入参数完整流程详解

2026-09-09 17:39:31博客
做国内数据采集、电商比价、本地业务测试,或者需要模拟不同城市IP访问国内网站时,国内代理IP几乎是绕不开的基础设施。但很多开发者拿到代理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:协议类型,httpsocks5
  • 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参数的上限取决于你购买的套餐规格。在控制台可以看到当前套餐支持的最大单次提取数量。如果业务需要更大并发,可以联系光络云客服确认扩容方案。