WordPress.com sites answer the feed with a browser check, and the feed fails for hours #317

Closed
opened 2026-10-20 08:42:36 -07:00 by rays · 1 comment
Owner

Pelgrane Press's feed (https://pelgranepress.com/feed/) fails with HTTP 403 Forbidden on most checks: 8 of the checks logged since 2026-10-19 23:48. The site is on WordPress.com (Automattic's CDN, server-timing a8c-cdn), which answers /feed/, /feed/atom/ and ?feed=rss2 from Tower with "Checking your browser...", a JavaScript challenge (/__challenge/probes.js), whatever the User-Agent; curl from Tower gets the same. The publisher has been asked and has not changed anything.

The same posts are in WordPress.com's public API, which the check does not cover: https://public-api.wordpress.com/wp/v2/sites/pelgranepress.com/posts answers 200, each post's guid the same as the feed's (https://pelgranepress.com/?p=), so items read from it are the ones ipx already has.

Fix: when a feed answers 403 with that challenge, read the posts from the API instead, and parse WordPress's posts JSON as a feed.

Pelgrane Press's feed (https://pelgranepress.com/feed/) fails with HTTP 403 Forbidden on most checks: 8 of the checks logged since 2026-10-19 23:48. The site is on WordPress.com (Automattic's CDN, server-timing a8c-cdn), which answers /feed/, /feed/atom/ and ?feed=rss2 from Tower with "Checking your browser...", a JavaScript challenge (/__challenge/probes.js), whatever the User-Agent; curl from Tower gets the same. The publisher has been asked and has not changed anything. The same posts are in WordPress.com's public API, which the check does not cover: https://public-api.wordpress.com/wp/v2/sites/pelgranepress.com/posts answers 200, each post's guid the same as the feed's (https://pelgranepress.com/?p=<id>), so items read from it are the ones ipx already has. Fix: when a feed answers 403 with that challenge, read the posts from the API instead, and parse WordPress's posts JSON as a feed.
rays added the bug label 2026-10-20 08:42:36 -07:00
Author
Owner

Fixed in 4af1236: fetch recognises the browser check (403 with the /__challenge/ script) and reads the site's posts from public-api.wordpress.com/wp/v2/sites//posts instead; parse reads that JSON as a feed, with the feed's own guids, so nothing is duplicated. Verified on Pelgrane Press: /feed/ still answers 403 from Tower, and a forced check succeeded with the same 23 items and no error. Deployed in ipx and ipx-directory. Limit: the API's default ten posts.

Fixed in 4af1236: fetch recognises the browser check (403 with the /__challenge/ script) and reads the site's posts from public-api.wordpress.com/wp/v2/sites/<host>/posts instead; parse reads that JSON as a feed, with the feed's own guids, so nothing is duplicated. Verified on Pelgrane Press: /feed/ still answers 403 from Tower, and a forced check succeeded with the same 23 items and no error. Deployed in ipx and ipx-directory. Limit: the API's default ten posts.
rays closed this issue 2026-10-23 05:14:08 -07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rays/ipx#317