dakrone / clj-http

An idiomatic clojure http client wrapping the apache client. Officially supported version.
http://clojars.org/clj-http
MIT License
1.77k stars 408 forks source link

`:query-params` are re-ordered #631

Open verhovsky opened 1 year ago

verhovsky commented 1 year ago

I ran a simple server like this

nc -kl 28139

and ran this Clojure code:

(require '[clj-http.client :as client])

(client/get "http://localhost:28139/house-sitting/" {:query-params {"page" "1"
                                                                    "available" ["" "1"]
                                                                    "location" "0"
                                                                    "city[id]" "0"
                                                                    "city[locality]" ""
                                                                    "city[locality_text]" ""
                                                                    "city[administrative_area_level_2]" ""
                                                                    "city[administrative_area_level_2_text]" ""
                                                                    "city[administrative_area_level_1]" ""
                                                                    "city[administrative_area_level_1_text]" ""
                                                                    "city[country]" ""
                                                                    "city[country_text]" ""
                                                                    "city[latitude]" ""
                                                                    "city[longitude]" ""
                                                                    "city[zoom]" ""
                                                                    "city[name]" ""
                                                                    "region[id]" "0"
                                                                    "region[locality]" ""
                                                                    "region[locality_text]" ""
                                                                    "region[administrative_area_level_2]" ""
                                                                    "region[administrative_area_level_2_text]" ""
                                                                    "region[administrative_area_level_1]" ""
                                                                    "region[administrative_area_level_1_text]" ""
                                                                    "region[country]" ""
                                                                    "region[country_text]" ""
                                                                    "region[latitude]" ""
                                                                    "region[longitude]" ""
                                                                    "region[zoom]" ""
                                                                    "region[name]" ""
                                                                    "country" ""
                                                                    "environment" ""
                                                                    "population" ""
                                                                    "period" "0"
                                                                    "date" "2017-03-03"
                                                                    "datestart" "2017-03-03"
                                                                    "dateend" "2017-06-24"
                                                                    "season" ""
                                                                    "duration" ""
                                                                    "isfd" ""
                                                                    "stopover" ""}})

like this

clj -Sdeps '{:deps {clj-http/clj-http {:mvn/version "3.12.3"} cheshire/cheshire {:mvn/version "5.11.0"}}}' -M main.clj

What I exected:

GET /house-sitting/?page=1&available=&available=1&location=0&city%5Bid%5D=0&city%5Blocality%5D=&city%5Blocality_text%5D=&city%5Badministrative_area_level_2%5D=&city%5Badministrative_area_level_2_text%5D=&city%5Badministrative_area_level_1%5D=&city%5Badministrative_area_level_1_text%5D=&city%5Bcountry%5D=&city%5Bcountry_text%5D=&city%5Blatitude%5D=&city%5Blongitude%5D=&city%5Bzoom%5D=&city%5Bname%5D=&region%5Bid%5D=0&region%5Blocality%5D=&region%5Blocality_text%5D=&region%5Badministrative_area_level_2%5D=&region%5Badministrative_area_level_2_text%5D=&region%5Badministrative_area_level_1%5D=&region%5Badministrative_area_level_1_text%5D=&region%5Bcountry%5D=&region%5Bcountry_text%5D=&region%5Blatitude%5D=&region%5Blongitude%5D=&region%5Bzoom%5D=&region%5Bname%5D=&country=&environment=&population=&period=0&date=2017-03-03&datestart=2017-03-03&dateend=2017-06-24&season=&duration=&isfd=&stopover= HTTP/1.1

But instead I got the query params in a different order than they appear in the source code:

GET /house-sitting/?region%5Bid%5D=0&city%5Blocality%5D=&city%5Blocality_text%5D=&city%5Badministrative_area_level_1_text%5D=&region%5Badministrative_area_level_1%5D=&country=&season=&dateend=2017-06-24&region%5Bcountry_text%5D=&region%5Blocality%5D=&city%5Bzoom%5D=&city%5Blatitude%5D=&city%5Blongitude%5D=&city%5Bname%5D=&isfd=&datestart=2017-03-03&city%5Badministrative_area_level_1%5D=&location=0&region%5Badministrative_area_level_2%5D=&city%5Badministrative_area_level_2_text%5D=&population=&region%5Blatitude%5D=&duration=&region%5Blongitude%5D=&environment=&region%5Bzoom%5D=&region%5Badministrative_area_level_2_text%5D=&region%5Bname%5D=&date=2017-03-03&region%5Badministrative_area_level_1_text%5D=&period=0&city%5Bcountry_text%5D=&city%5Bcountry%5D=&city%5Bid%5D=0&city%5Badministrative_area_level_2%5D=&page=1&stopover=&available=&available=1&region%5Blocality_text%5D=&region%5Bcountry%5D= HTTP/1.1

Sorry in advance if this is a dumb issue, I am a clojure noob but https://stackoverflow.com/questions/27876324/is-the-order-of-the-result-is-the-same-when-convert-map-to-vector-in-clojure says that clojure map literals retain insertion order.