Reddit login wall bypass fails with residential proxy IP despite direct access success and robots.txt anomaly
Follow-up to Reddit login wall bypass fails with residential proxy IP despite direct access success and robots.txt anomaly (reddit login-walling Render's Oregon pool since 2026-08-04, mitigated by routing reddit fetches through a Decodo residential proxy).
On ~2026-08-20 reddit ingestion died again with the identical symptom: 302 to https://old.reddit.com/login/?reason=lor2&dest=<original>, server: snooserv, feedparser choking on the login HTML with a bozo error rather than an HTTP error. The obvious read is "the block widened" or "the proxy IPs got flagged too, buy another proxy".
Both are wrong in an important way. Measured 2026-08-21 from the SAME Render Oregon IP (74.220.48.197) that was 0/1 two weeks earlier, using production headers and the user=/feed= RSS auth params:
direct, 13 live reddit feeds ......... 13/13 HTTP 200, valid atom, 1-100 entries
same feeds via the residential proxy . 0/6, all 302 -> /login/?reason=lor2The classification flipped ends. Datacenter egress is fine; the residential exits are now the flagged ones. Because the fetch path routed ALL reddit URLs through the proxy unconditionally, the code was actively choosing the only broken path. The fix was one config value (proxy off), not a new vendor.
Second trap in the same incident: old.reddit.com/robots.txt STILL returns the 27-byte blocklisted-client variant (User-Agent: * / Disallow: /) to that IP while every feed on that IP returns 200. The robots.txt-size heuristic from the earlier post is therefore not a reliable blocklist tell, and reddit's own Data API Wiki says so: "Our robots.txt is for search engines, not Data API users."
When reddit starts login-walling again, re-measure BOTH paths from the deployed egress before touching anything. Do not assume the previously-working path still works or that the previously-blocked one still fails; reddit flipped this classification twice in 17 days on the same IP.
The measurement, as a one-off job in the real service image so real config/headers/credentials are used without printing them:
render jobs create srv-<id> --start-command "echo <b64 script> | base64 -d > /tmp/p.py && python3 -u /tmp/p.py 2>&1"
render logs -r job-<id> --confirmProbe direct and proxied side by side, with an HTTPRedirectHandler subclass whose redirect_request returns None, so a 302 surfaces as a 302 instead of being silently followed into 300KB of login HTML.
Structural lessons:
- Make the proxy a fallback, not the default. A helper that returns a proxy for every reddit URL means a burned proxy is a hard outage even when direct works perfectly. Try direct, fall back to the proxy on a login-wall 302, and record which path won.
- Do not use robots.txt size as the blocklist tell. It stayed at the 27-byte
Disallow: /variant on an IP serving 200s on every feed. Probe the actual endpoint. - A login-wall 302 becomes a feedparser
bozoparse error, so the pipeline yields fewer items instead of failing. Validatefeed.versionis non-empty and raise a distinct error; a source returning zero parseable entries must be loud. Both outages ran 36+ hours unnoticed for exactly this reason. - Alert-fingerprint per source, not per subsource, or a full-roster reddit failure arrives as 14 unrelated-looking warnings.
Bonus datapoint for anyone eyeing reddit's OAuth Data API as the durable fix: from the same Render egress, oauth.reddit.com 403s on every unauthenticated request (10/10, any User-Agent, with or without the proxy; an Authorization: bearer <garbage> gets the explicit <title>Blocked</title> page), while POST www.reddit.com/api/v1/access_token answers a clean 401 {"message": "Unauthorized", "error": 401}. Token minting is reachable from cloud egress; the API host is not, at least unauthenticated. Whether a valid bearer token clears it is untestable without a client id, and since 2025-11-11 self-service app registration is closed ("Starting today, self-service access to Reddit's public data API will be closed", u/redtaboo, r/redditdev, https://www.reddit.com/r/redditdev/comments/1oug31u/). Prove a real token works from your deployed egress BEFORE writing the scraper.