LlamaIndex is not one web client. Its web readers package ships twenty four separate readers, and the one you pick decides whether a proxy can apply at all. We read release v0.14.24 on 20 September 2026 and went through the fetching code of each family.
Only nine files in that whole package mention a proxy, and four of those are documentation.
Twenty four answers
The second column is the one people forget. A reader can use your address and still refuse to let you change it.
The pair that disagrees
Two readers with almost the same name behave oppositely, and nothing in either signature says so.
The simple reader is one line:
response = requests.get(url, headers=None, timeout=self._timeout)
That library reads HTTP_PROXY, HTTPS_PROXY and NO_PROXY by itself, so this reader is routed for free. Worth knowing that headers=None also means the request goes out with the library's own default user agent, which names the library.
The async reader builds its own session:
async with aiohttp.ClientSession(timeout=timeout) as session:
A timeout and nothing else. That library does not read the proxy variables unless it is told to trust the environment, and it is not told here. So the switch from one reader to the other quietly removes your proxy.
The argument that drops your login
Exactly one reader in the package takes a proxy as an argument. It builds a browser:
self._launch_options["proxy"] = {
"server": proxy,
}
The server, and nothing else. The browser layer underneath takes a login in separate username and password fields, so a login written inside that string is dropped rather than used. We covered that rule in detail on our Playwright MCP page.
| Where a login can live | Does this package carry it |
|---|---|
| inside the proxy string | no |
| in separate browser fields | not exposed by this reader |
| as an allowed address | yes, nothing to carry |
So on this reader an allowed address is not a preference, it is the practical option.
Bring your own browser
The crawling reader takes a different approach and it is the better one:
def __init__(self, prefix, max_depth=10, uri_as_id=False, driver=None)
That driver is a browser you built. Start it with the proxy flag you want, with a login answered however your setup answers it, and hand it in. No reader argument needs to exist for this to work, which is why we like the shape.
The switch that is not your address
About a third of the twenty four readers send the URL to a hosted service, and several of those have something called a proxy option. One documents it as enable or disable proxies. Another takes a boolean for residential addresses. A third takes the name of a pool inside a configuration dictionary.
None of them is your address. They switch on the service's own addresses, the fetch happens on their machines, and the cost lands on their bill rather than your line. That is a legitimate choice. It is simply a different question from the one this page answers.
Which proxy type fits it?
Pick the reader first. That decides whether an address can be applied at all, and it is a free decision.
Then, for the readers that do use your line, residential is the type that changes the answer for the sites that treat a hosting address differently. Our own paired test is the size of that effect: 4 of 13 sites answered a residential address differently from a server one, with plain requests of exactly the kind the simple reader sends.
Size it for text. Feeds, pages and extracted documents are small, so a per gigabyte line goes a long way, and the two readers that drive a browser are the ones that will actually spend. Because the only proxy argument here cannot carry a login, an allowed address suits this project particularly well: on a Residential Premium plan your machine's address can be allowed, up to 150 per plan. The residential proxies page lists the plans, and the plan API manages allowed addresses from code.
What breaks
- The proxy worked and then stopped. You changed readers. Check which library the new one uses.
- Your login is ignored. The proxy argument sets the server only. Use an allowed address.
- A hosted reader reports a country you did not choose. Their addresses, their machines.
- A site sees a library user agent. The simple reader sends no headers at all.
- The browser readers cost more traffic. They load the whole page, not just the text.
What this page does not cover
We read the release as text and did not run any reader, so we did not watch a fetch use an address and did not measure traffic. We did not prove by experiment that the async reader ignores the variables. We report how its session is built and what that construction means in that library, and a reader who needs certainty should test it. We read five readers closely and classified the rest from the package listing and a code search rather than line by line. This project moves quickly: the release is a month old and the branch was pushed to the day before we read it. We will read it again by 20 October 2026.
Where to go from here
Proxies for Playwright MCP covers the browser layer under the one reader with a proxy argument, including where the login has to go. Proxies for Open WebUI covers the same library question in a different project, where one session was built to trust the environment and one was not. Proxies for GPT Researcher covers another framework where the scraper choice decides everything.
Sources
- The web readers package listing, the simple reader's single request call, the async reader's session construction, the readability reader's launch options, the whole site reader's driver parameter, and the documented proxy parameters of the hosted readers (llama-index-integrations/readers/llama-index-readers-web). run-llama/llama_index, release v0.14.24 of 19 August 2026, read 20 September 2026.
- Our paired address test of 19 September 2026: 16 URLs, plain requests, two runs from our server and two through a residential line of our house plan. Raw output is kept in the research folder of our OpenClaw page.
- Plans, allowed addresses and per gigabyte pricing. HProxy documentation, hproxy.com/docs, 20 September 2026.


