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=`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 # 单位是秒

你可能感兴趣的:(shell命令,curl,url编码,中文乱码,url解码,java)