遇到問題--curl--- get方法url參數中有+、空格、=、%、&、#等特殊符號的致使傳參不全

狀況

使用curl訪問api以下:java

curl http://127.0.0.1:8080/test?a=1&b=2&c=3

會報錯linux

ServiceExceptionHandler.java[line:30] exception ERROR org.springframework.web.bind.MissingServletRequestParameterException: Required String[] parameter 'b' is not present

緣由

包含有特殊符號會致使截斷web

在url中直接使用一些特殊字符,在服務器端接收的時候常常出現數據丟失的狀況。
那麼哪些字符可以直接被服務器識別,哪些有不能呢?
字符「a-z」,」A-Z」,」0-9」,」.」,」-「,」_」,」*」都會直接被服務器識別,維持原值。
然而,字符」+」,」/」,」?」,」%」,」#」,」&」,」=」都將被轉碼。那麼咱們就須要轉碼來讓服務器進行識別。spring

解決方式

轉義特殊符號api

方式一

在Linux下服務器

curl http://127.0.0.1:8080/test?a=1&b=2&c=3

$_GET只能獲取到參數acurl

因爲url中有&,其餘參數獲取不到,在linux系統中& 會使進程系統後臺運行svg

必須對&進行下轉義才能$_GET獲取到全部參數post

curl http:/127.0.0.1:8080/test?a=1\&b=2\&c=3

方式二ui

序號 特殊字符 十六進制值
1 % %25
2 # %23
3 & %26
4 + %2B
5 = %3D
6 空格 %20
7 / %2F
8 \ %5C
9 ? %3F
10 . %2E
11 : %3A

注意

put 或者post方法中 -d 使用單引號 括起來的則不須要轉義