Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Bug]: HTTP crawler puts proxy credentials into the URL unencoded

Cerrado Apto para principiantes
#2,326 3 comentarios 0 reacciones 0 asignados Ver en GitHub

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

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

⚙ Done 🐞 Bug 🥸 - Medium
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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de unclecode/crawl4ai

Todos los issues de unclecode/crawl4ai

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.