Přeskočit na hlavní obsah

Chyba 400 při odesílání URL (cURL)

Chyba 400 při odesílání URL s filtrací přes curl

Autor: Petr Pech

Filtr v adrese obsahuje znaky, které v URL nemají svůj běžný význam — typicky >, <, mezeru nebo &. Pokud je nezakódujete, požadavek neprojde.


Jak se to projeví

Co v adrese je

Co dostanete

Neplatná úniková sekvence (např. samotné %)

400 Bad Request — požadavek odmítne proxy ještě před jádrem.

Rozbitý filtr (např. chybějící závorka)

400 a v odpovědi Špatný formát WQL dotazu, problém na pozici ….

Nezakódovaný znak, který filtr rozbije jinak (např. >)

200, ale místo XML přijde HTML stránka „Operaci nelze provést". Program, který čeká XML, tedy skončí na chybě parseru.

Mezera nebo < v adrese

Požadavek většinou odmítne už samotný klient a vůbec jej neodešle.


Jak filtr zakódovat

Nejčastěji potřebné znaky:

Znak

V adrese

mezera

%20

>

%3E

<

%3C

&

%26

%

%25

+

%2B

Správně zakódovaný příkaz pak vypadá takto:

curl -u uzivatel:heslo -k -L -f \
"https://server:5434/c/{firma}/faktura-vydana/(datSplat%3Enow()).xml" \
-o ds.xml

💡 Ruční kódování si můžete odpustit — většina knihoven má na to hotovou funkci (v Pythonu urllib.parse.quote, v PHP rawurlencode, v JavaScriptu encodeURIComponent). Filtr napsaný nezakódovaně v adresním řádku prohlížeče se také zakóduje sám, takže jej stačí zkopírovat zpět do schránky.

⚠️ Adresu uzavřete do uvozovek. Bez nich si znaky jako &, ( a ) vyloží shell po svém a odešle se něco jiného, než jste napsali.


Související

Dostali jste odpověď na svou otázku?