在cURL中传递编码的链接

时间:2019-02-08 12:24:13

标签: javascript curl

我正在尝试使用JS中以前编码的URL进行卷曲

当URL未使用js编码时(例如https://www.google.com),它可以工作 如果将URL编码为https%3A%2F%2Fwww.google.com

,则无法使用
+ 2.*
- *.txt

2 个答案:

答案 0 :(得分:1)

请勿在整个网址上使用encodeURIComponent。请改用encodeURIencodeURI检测需要编码的内容和不需要编码的内容。其输出可以无错误地传递到curlfetch

console.log(encodeURIComponent('http://dont.encode.before?a=encode me'));
console.log(encodeURI('http://dont.encode.before?a=encode me'));

答案 1 :(得分:1)

  

URL编码为https%3A%2F%2Fwww.google.com

时不起作用

然后先将其解码,

link=decodeURI(link)

但是您还需要在将该URL作为命令行参数传递之前转义该URL,在PHP中将使用escapeshellarg,但这是它的javascript端口:http://locutus.io/php/exec/escapeshellarg/

function escapeshellarg (arg) {
  //  discuss at: http://locutus.io/php/escapeshellarg/
  // original by: Felix Geisendoerfer (http://www.debuggable.com/felix)
  // improved by: Brett Zamir (http://brett-zamir.me)
  //   example 1: escapeshellarg("kevin's birthday")
  //   returns 1: "'kevin\\'s birthday'"

  var ret = ''

  ret = arg.replace(/[^\\]'/g, function (m, i, s) {
    return m.slice(0, 1) + '\\\''
  })

  return "'" + ret + "'"
}

代码应显示为

var cmd = "curl -i " + escapeshellarg(encodedLink);