描述性的 User-Agent
Reddit 的文档说明,通用 User-Agent 会受到更严格的限流。在认定是地址问题之前,先设置一个唯一且具有描述性的 User-Agent。
问题
在这些平台中,Reddit 与众不同:它提供带有文档化速率限制的 API,并要求使用具有描述性、可唯一识别的 User-Agent。使用通用 User-Agent 的请求会受到更严格的速率限制,这是有文档记载的行为,而非猜测。因此,在这里合规采集是真正可以实现的,而在什么都不公开的平台上则不然。
由于限制是按客户端和按地址执行的,大规模采集的瓶颈在于请求配额,而不是地址信誉。将请求分散到多个住宅出口可以提高上限,但正确的第一步是正确完成认证并设置真实的 User-Agent——这不花任何费用,并能解决大部分限流问题。
Reddit 也对 API 访问重新定价,这把部分工作推向了网页端。同样的原则也适用于网页端:如实标识您的客户端,并控制请求节奏。值得遵循的是 Reddit 自己的指南,而不是任何第三方关于安全速率的说法。
对于很大一部分 Reddit 工作来说,代理根本没有必要,如实说明这一点比推销代理更有用。一个正确完成认证、使用描述性 User-Agent 并在文档规定配额内运行的客户端不会被限流,而且这样的设置不花任何费用。只有当总请求量超出单个客户端的覆盖能力,或在匿名采集中按地址的限制成为真正瓶颈时,代理才有意义。在解决认证问题之前就求助于代理,是常见而代价高昂的错误。
如果您想在做决定前比较各种工作流程,可以浏览所有代理应用场景,看看哪种配置最合适。
TrueProxies 如何解决
Reddit 的文档说明,通用 User-Agent 会受到更严格的限流。在认定是地址问题之前,先设置一个唯一且具有描述性的 User-Agent。
限制按客户端和按地址执行,因此请规划请求配额,而不是试图突破限流器。
住宅出口可以提高大规模采集的总体上限。请在认证和请求节奏都正确之后再使用,而不是之前。
Reddit 会在 API 响应中返回速率限制响应头。请读取这些响应头,并根据其报告的数值退避,而不是从失败中推断限制。
经过正确认证的文档化 API 是最不容易出问题的途径。只有当 API 确实无法满足需求时,才转向网页端。
推荐
低至 $1.64/GB
当采集是间歇性集中进行而非持续运行时,按 GB 付费,空闲期间不产生费用。
10 Mbps 低至 $4.08/小时
固定时长的不限流量套餐适合持续采集,尤其是请求量难以用 GB 预估的情况。
集成
# Authenticate and identify the client before adding any proxy.
# Reddit documents that generic user agents are throttled harder.
UA="my-research-tool/1.0 (contact: you@example.com)"
curl -s -A "$UA" \
-H "Authorization: bearer $TOKEN" \
-D - -o /dev/null \
"https://oauth.reddit.com/r/<subreddit>/new?limit=100" | grep -i x-ratelimit
# Only distribute across residential exits once a single
# authenticated client's documented budget is genuinely exhausted.常见问题
通常不需要。Reddit 提供带有文档化速率限制的 API,正确完成认证并使用描述性的 User-Agent 就能解决大多数限流问题。只有当总请求量超出单个客户端的配额时,代理才有意义。
最常见的原因是使用了通用的 User-Agent 或缺少 User-Agent。Reddit 的文档说明,共用常见 User-Agent 的请求会受到更严格的限流。在认定是地址问题之前,请先设置一个唯一且具有描述性的 User-Agent。
对于匿名的公开数据采集,应该轮换:轮换可以把请求配额分散到整个 IP 池,而配额才是真正的瓶颈。对于需要认证的 API 工作,请遵守文档规定的单客户端限制,而不要试图绕过它。
不能。代理只改变网络来源。平台会将设备和浏览器指纹、账户历史以及行为信号与 IP 一并评估,其中任何一项都可能单独触发审核。请遵守各平台的条款,并使用非关键账户进行测试。
允许做什么由 Reddit 的 API 条款决定,而这些条款已经变过。采集前,请阅读现行条款及其公开内容政策。经过正确认证的文档化 API 是最不容易出问题的途径。
Reddit 为经过认证的 API 客户端公布了限制,并在每次调用的响应头中返回剩余配额。请读取这些响应头并根据其报告的数值退避,而不是从失败的请求中推断阈值。
对于经过认证的客户端不能,因为限制是按客户端执行的。将请求分散到多个出口只能提高匿名采集的总体上限。请先解决认证和 User-Agent 问题,因为这能解决大多数限流。
一个唯一且具有描述性、能标识您的应用和联系方式的 User-Agent。Reddit 的文档指出,共用通用 User-Agent 的客户端会受到更严格的速率限制,因此这是成本最低的解决办法。
团队使用住宅代理的其他方式。