Linux终端生存之道-curl


curl 编码问题

最近在写一款终端的词典翻译工具,原来的有道api不能用了,转而使用百度翻译的api ,先凑合用吧,谁让它现在免费呢。但是在使用curl 发起请求的时候,针对带有空格的单词查询总是报错.
最开始的错误写法如下

dic(){
  local q=$*
  local salt=123
  local sign=$(sign "${q}" "${salt}")
  curl  "https://api.fanyi.baidu.com/api/trans/vip/translate?&from=auto&to=auto&q=${q}&appid=${_baidu_fanyi_app_id}&salt=${salt}&sign=${sign}" | jq .trans_result[]
}

这样 dic "hello"dic "world" 的时候都没有问题。但是在 dic 'hello world' 的时候就报错了。就是因为q=hello world 的时候,中间的空格问题,这时候要考虑使用 curl 传参对 url 编码的问题。
正确的用法如下

dic(){
  local q=$*
  local salt=123
  local sign=$(sign "${q}" "${salt}")
  curl -sG --data-urlencode "q=${q}" \
          --data-urlencode "appid=${_baidu_fanyi_app_id}" \
          --data-urlencode "salt=${salt}" \
          --data-urlencode "sign=${sign}" \
          "https://api.fanyi.baidu.com/api/trans/vip/translate?&from=auto&to=auto" | jq .trans_result[]
}

–data-urlencode: 将数据作为 URL 编码的字符串传递给服务器。

curl -sG --data-urlencode "name=John Doe" --data-urlencode "age=30" https://example.com/api

在这个例子中,–data-urlencode 参数将 name 和 age 作为键值对传递给服务器,并将它们 URL 编码为 name=John%20Doe 和 age=30。服务器可以使用这些值来处理请求并返回响应。

打印出返回的 HTTP 请求头部和正文

curl 命令的 -i 选项

打印出返回的 HTTP 响应头部和正文

curl 命令的 -v 选项


评论
  目录