Передача закодированной ссылки в cURL - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь свернуть ранее закодированный URL в JS

. Он работает, когда URL не закодирован в формате js, например https://www.google.com. Он не работает, когда URL закодирован как https%.3A% 2F% 2Fwww.google.com

var link = "https://www.google.com";
var encodedLink = encodeURIComponent(link); // https%3A%2F%2Fwww.google.com
var cmd = "curl -i " + encodedLink;
var headers = execCommand(cmd, false); // error

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Не работает, когда URL закодирован как https% 3A% 2F% 2Fwww.google.com

, а затем сначала декодируется,

link=decodeURI(link)

но вам также нужно экранировать этот 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);
0 голосов
/ 08 февраля 2019

Не используйте encodeURIComponent для целых URL.Вместо этого используйте encodeURI.encodeURI определяет, что нужно кодировать, а что нет.Его вывод может быть передан в curl или fetch без ошибок.

console.log(encodeURIComponent('http://dont.encode.before?a=encode me'));
console.log(encodeURI('http://dont.encode.before?a=encode me'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...