List query parameters are percent-encoded twice
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 88/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- python
- Ambito
- backend, networking
Direzione di ricerca
Trova build_query_param ed esegui la riproduzione fornita con httpx.MockTransport per ispezionare il parametro collection_refs decodificato. Controlla i test vicini sui parametri di query e aggiungi copertura per i caratteri riservati; il completamento significa che gli elementi dell’elenco vengono codificati una sola volta e la riproduzione segnala food:pizza.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
build_query_param percent-encodes each item of a list parameter with urllib.parse.quote before it joins the items with commas. httpx then encodes the whole query string again, so every character that quote escapes reaches the server double-encoded.
For example, client.feeds.read_collections(collection_refs=["food:pizza"]) sends:
GET /api/v2/feeds/collections?collection_refs=food%253Apizza
The server decodes this once to food%3Apizza instead of food:pizza. Collection references always contain :, so read_collections and delete_collections cannot match any collection. The same applies to any list parameter item that contains a space, :, @, , or another reserved character, for example in get_many_messages(ids=...), member_custom_include and the moderation ids.
getstream-go and stream-node join list items with commas and encode the query string once, so they send collection_refs=food%3Apizza.
Steps to reproduce
import httpx
from getstream import Stream
seen = []
client = Stream(
api_key="key",
api_secret="secret",
transport=httpx.MockTransport(
lambda r: seen.append(r)
or httpx.Response(200, json={"duration": "0ms", "collections": []})
),
)
client.feeds.read_collections(collection_refs=["food:pizza"])
print(seen[0].url.params["collection_refs"])
Expected output: food:pizza
Actual output: food%3Apizza
- Lingua principale
- Python
- Stelle
- 25
- Fork
- 14
- Merge medio
- 18h 23m
- PR unite (30g)
- 12
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di GetStream/stream-py
-
Daily integration run is redAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
GetStream/stream-py#293 · 10 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
RuntimeError: generator didn't yield in telemetry wrapper with Python 3.12.10+ (getstream 2.5.x)Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
GetStream/stream-py#161 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di GetStream/stream-py
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
huggingface/smolagents#2976 ·
I maintainer di solito rispondono entro 1 giorno
-
bug Triage-Needed
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
FuRongJun-1999/dsh-memory#170 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pgvector/pgvector-python#163 ·
-
[开源推荐] 打拼音就出篆书的输入法,附古文字创作小工具Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
521xueweihan/HelloGitHub#3940 ·