Preskoči na glavno vsebino

Chyba 400 pri odosielaní URL (cURL)

Chyba 400 pri odosielaní URL s filtrovaním cez curl

Avtor: Petr Pech

Filter v adrese obsahuje znaky, ktoré v URL nemajú svoj bežný význam — typicky >, <, medzeru alebo &. Ak ich nezakódujete, požiadavka neprejde.


Ako sa to prejaví

Čo je v adrese

Čo dostanete

Neplatná úniková sekvencia (napr. samotné %)

400 Bad Request — požiadavku odmietne proxy ešte pred jadrom.

Rozbitý filter (napr. chýbajúca zátvorka)

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

Nezakódovaný znak, ktorý filter rozbije inak (napr. >)

200, ale namiesto XML príde HTML stránka „Operáciu nemožno vykonať". Program, ktorý očakáva XML, tak skončí na chybe parsera.

Medzera alebo < v adrese

Požiadavku väčšinou odmietne už samotný klient a vôbec ju neodošle.


Ako filter zakódovať

Najčastejšie potrebné znaky:

Znak

V adrese

medzera

%20

>

%3E

<

%3C

&

%26

%

%25

+

%2B

Správne zakódovaný príkaz potom vyzerá takto:

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

💡 Ručné kódovanie si môžete odpustiť — väčšina knižníc má na to hotovú funkciu (v Pythone urllib.parse.quote, v PHP rawurlencode, v JavaScripte encodeURIComponent). Filter napísaný nezakódovane v adresnom riadku prehliadača sa tiež zakóduje sám, takže ho stačí skopírovať späť do schránky.

⚠️ Adresu uzavrite do úvodzoviek. Bez nich si znaky ako &, ( a ) vyloží shell po svojom a odošle sa niečo iné, než ste napísali.


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?