shell命令|Shell命令(curl之手动给中文参数编码)

【shell命令|Shell命令(curl之手动给中文参数编码)】我们想用curl发送一个get请求,并附带一个中文参数。
若直接发送,中文可能会乱码:

curl "www.ipaddr.com?name=张三&age=26" # 或 curl -G \ --data-urlencode "name=张三" \ --data-urlencode "age=26" \ "www.ipaddr.com"

以下是一种解决方案。
先看java程序:
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public static void main(String[] args) throws UnsupportedEncodingException { String encodeURL = URLEncoder.encode("张三", "UTF-8"); System.out.println(encodeURL); String decodeURL = URLDecoder.decode(encodeURL, "UTF-8"); System.out.println(decodeURL); String noEncode = URLDecoder.decode("abc234", "UTF-8"); System.out.println(noEncode); }

输出:
%E5%BC%A0%E4%B8%89 张三 abc234

我们可以用shell对中文实现同样的编码:
value=https://www.it610.com/article/`echo -n"张三" | xxd -ps | tr -d '\n' | sed -r 's/(..)/%\1/g'` echo $value # %e5%bc%a0%e4%b8%89# 然后用curl传递编码后的参数 curl -G \ --data-urlencode "name=${value}" \ --data-urlencode "age=26" \ "www.ipaddr.com"

这样只要在后台对参数进行url解码,就能获取到传递的参数了,不会乱码。
另外用curl请求一个网址,如果由于各种原因服务器响应时间很长,curl会挂起等待很久,这个时间可以设置:
--max-time 3 # 单位是秒

    推荐阅读