[Bug]: HTTP crawler puts proxy credentials into the URL unencoded
Los mantenedores suelen responder en 1 día
@omarbounawarapy ya está trabajando en esto.
Desde el 1/10/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 88/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- backend, networking, security
Línea de trabajo
Comienza en async_crawler_strategy.py, en _format_proxy_url, alrededor de la línea 2634, y luego sigue su uso como argumento de proxy alrededor de la línea 2737. Reproduce los casos de caracteres especiales indicados con aiohttp y añade cobertura de regresión específica. Se considera terminado cuando las solicitudes de proxy válidas conservan literalmente las credenciales y los errores no exponen la contraseña en la URL del error.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
crawl4ai version
0.9.4 (same code on develop at 1f68e5b)
Expected Behavior
AsyncHTTPCrawlerStrategy works through a proxy whose username or password contains #, /, ? or %, as the browser path already does (it passes username and password to Playwright as separate fields).
Current Behavior
_format_proxy_url (async_crawler_strategy.py:2634) builds f"{protocol}://{username}:{password}@{rest}" without percent-encoding. Results with aiohttp 3.14.3 against a local proxy:
| password | result |
|---|---|
plainpass, p@ss |
correct credentials sent |
p#ss, pa/ss, p?ss |
aiohttp.InvalidURL, request never sent |
p%41ss |
proxy receives pAss |
The InvalidURL message is the whole URL, and the except aiohttp.ClientError branch re-raises it as HTTPCrawlerError(f"HTTP client error: {str(e)}"), so the password ends up in the error text.
Is this reproducible?
Yes
Inputs Causing the Bug
ProxyConfig(server="http://host:port", username="user", password="p#ss") with AsyncHTTPCrawlerStrategy.
Steps to Reproduce
Pass the output of _format_proxy_url as proxy= to aiohttp.ClientSession.get, which is what the crawler does at async_crawler_strategy.py:2737.
Code snippets
from urllib.parse import quote
return f"{protocol}://{quote(username, safe='')}:{quote(password, safe='')}@{rest}"
(both branches). Happy to send it as a PR to develop with a test.
OS
Windows 10
Python version
3.11
- Lenguaje dominante
- Python
- Estrellas
- 85.4k
- Forks
- 8.9k
- Merge medio
- 5 d 7 h
- PR fusionados (30 d)
- 23
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de unclecode/crawl4ai
-
[Bug]: Since 0.9.1, Linux launches chrome-headless-shell instead of ChromiumPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
[Bug]: BestFirstCrawlingStrategy fetches a full batch past max_pagesPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
unclecode/crawl4ai#2381 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug]: CrawlerRunConfig.clone() drops fallback_fetch_function, so deep crawls never use itPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
[Bug]: Docker memory guard reads host RAM when no container limit is set — cgroup v2 "max" defeats get_container_memory_percentPosiblemente ocupada @Battleplus la tomó hace 55 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
unclecode/crawl4ai#2123 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug]: After a streamed deep crawl is stopped early, the next deep crawl returns only the start pagePosiblemente ocupada @PiUnknown la tomó hace 3 días. Abierto
Dificultad 4/5 1-2 días Aptitud para principiantes 12/100
unclecode/crawl4ai#2380 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de unclecode/crawl4ai
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
521xueweihan/HelloGitHub#4025 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
aws-samples/sample-per-model-bedrock#321 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 68/100
FavioVazquez/showtime#101 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
koush/ha_scrypted#81 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
google/osv-scanner-action#147 ·