I have a maximally shoddy ISP, and I'm on a metered satellite connection that basically just stops after 15GB and returns an "over quota page".
The IDE does not respond well when receiving this page!!!
If loading the IDE and having it check library manager is the "straw that breaks the camel's back" then this kind of thing results in library_index.json:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Activation de votre connexion Internet par Satellite Nordnet </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="title" content="Site Activation Satellite" />
<meta name="language" content="fr" />
<meta name="robots" content="noindex,nofollow,noarchive" />
with many subsequent problems, rendering IDE unusable mainly "library manager broken" error messages. At least since 1.8.7 the IDE still loads, prior to that the IDE would not appear at all, which is why it has taken me so long to spot this problem!
Can we do some "common sense" checks on the reply before "running with it" and not simply assume an http 200 means we have sensible data?
Or as a work around you can in preferences turn OFF the check for updates and only use that when you know you still have data available.
Just a suggestion but your point is exceptionally valid and you might like to put it up as an issue on the arduino github.