Python >> Tutoriel Python >  >> Python

[Collection] Méthodes de décodage d'URL

L'encodage d'URL "est une méthode pour encoder des informations dans un URI (Uniform Resource Identifier)" . Il est également appelé Encodage en pourcentage car les symboles de pourcentage sont utilisés pour encoder certains caractères réservés :

! # $ % & ' ( ) * + , / : ; = ? @ [ ]
%21 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

Cet article rassemble différentes façons de décoder une chaîne encodée URL. Commençons !

Python 2

$ alias urldecode='python -c "import sys, urllib as ul; \
    print ul.unquote_plus(sys.argv[1])"'

$ alias urlencode='python -c "import sys, urllib as ul; \
    print ul.quote_plus(sys.argv[1])"'

Source

Voici un exemple d'utilisation :

$ urldecode 'q+werty%3D%2F%3B'
q werty=/;

$ urlencode 'q werty=/;'
q+werty%3D%2F%3B

Python 3

$ alias urldecode='python3 -c "import sys, urllib.parse as ul; \
    print(ul.unquote_plus(sys.argv[1]))"'

$ alias urlencode='python3 -c "import sys, urllib.parse as ul; \
    print (ul.quote_plus(sys.argv[1]))"'

Voici un exemple d'utilisation :

$ urldecode 'q+werty%3D%2F%3B'
q werty=/;

$ urlencode 'q werty=/;'
q+werty%3D%2F%3B

Source

sed

$ sed 's@+@ @g;s@%@\\x@g' file | xargs -0 printf "%b"

Source

sed avec echo -e

$ sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' file | xargs echo -e

Source

sed avec un alias

Pour plus de commodité, vous pouvez utiliser un alias :

$ alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'

Si vous voulez décoder, vous pouvez maintenant simplement utiliser :

$ echo "http%3A%2F%2Fwww" | urldecode
http://www

Source

Frapper

input="http%3A%2F%2Fwww"
decoded=$(printf '%b' "${input//%/\\x}")

Source

Pour gérer les plus (+ ) correctement, remplacez-les par des espaces en utilisant sed :

decoded=$(input=${input//+/ }; printf "${input//%/\\x}")

Fonctions Bash + urlencode() + urldecode()

urlencode() {
    # urlencode <string>
    local length="${#1}"
    for (( i = 0; i < length; i++ )); do
        local c="${1:i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) printf "$c" ;;
            *) printf '%%%02X' "'$c" ;;
        esac
    done
}

urldecode() {
    # urldecode <string>

    local url_encoded="${1//+/ }"
    printf '%b' "${url_encoded//%/\\x}"
}

Origine :

  • StackOverflow
  • https://github.com/sixarm/urldecode.sh

bash + xxd

urlencode() {
  local length="${#1}"
  for (( i = 0; i < length; i++ )); do
    local c="${1:i:1}"
    case $c in
      [a-zA-Z0-9.~_-]) printf "$c" ;;
    *) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
  esac
done
}

Origine :

  • l'essentiel de cdown
  • Débordement de pile
  • Une autre source

PHP

$ echo oil+and+gas | php -r 'echo urldecode(fgets(STDIN));' // Or: php://stdin
oil and gas

Source

Bibliothèque PHP

php -r 'echo urldecode("oil+and+gas");'

Source

Perl

decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")

Source

Perl pour traiter le fichier

perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file

Source

mauvais

awk -niord '{printf RT?$0chr("0x"substr(RT,2)):$0}' RS=%..

Origine :

  • commentaire d'anon dans l'article StackOverflow
  • Source
  • Utiliser awk printf pour urldécoder le texte.

Python 2 urllib.unquote

Le urllib.unquote est une fonction spéciale dans la bibliothèque standard intégrée de Python urllib qui fait ce dont vous avez besoin :

decoded_url=$(python2 -c 'import sys, urllib; print urllib.unquote(sys.argv[1])' "$encoded_url")

Vous pouvez également l'utiliser pour modifier un fichier :

python2 -c 'import sys, urllib; print urllib.unquote(sys.stdin.read())' <file >file.new &&
mv -f file.new file

Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding

Python 3 urllib.parse.unquote

Si vous exécutez Python 3 sur votre système (comme la plupart des gens le feraient), utilisez la fonction alternative urllib.parse.unquote . Pour vérifier votre version, consultez cet article.

decoded_url=$(python3 -c 'import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))' "$encoded_url")

Encore une fois, vous pouvez utiliser la fonction pour traiter un fichier comme suit :

python3 -c 'import sys, urllib; print(urllib.parse.unquote(sys.stdin.read()))' <file >file.new &&
mv -f file.new file

Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding

URI Perl ::Échappement

Le URI::Escape résout le problème du décodage d'URL pour les utilisateurs de Perl.

decoded_url=$(perl -MURI::Escape -e 'print uri_unescape($ARGV[0])' "$encoded_url")

Vous pouvez utiliser la fonction pour traiter un fichier comme suit :

perl -i -MURI::Escape -e 'print uri_unescape($ARGV[0])' file

Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding

Perl One-Liner sans installer de modules

$ perl -pe 's/\%(\w\w)/chr hex $1/ge'

Voici un exemple d'utilisation :

$ echo '%21%22' |  perl -pe 's/\%(\w\w)/chr hex $1/ge'
!"

Source :https://unix.stackexchange.com/questions/159253/decoding-url-encoding-percent-encoding

Bash Regex

$ function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

Maintenant, vous pouvez utiliser la fonction comme une commande comme celle-ci :

$ urldecode https%3A%2F%2Fgoogle.com%2Fsearch%3Fq%3Durldecode%2Bbash
https://google.com/search?q=urldecode+bash

Si vous devez affecter des variables, utilisez cette stratégie :

$ x="http%3A%2F%2Fstackoverflow.com%2Fsearch%3Fq%3Durldecode%2Bbash"
$ y=$(urldecode "$x")
$ echo "$y"
http://stackoverflow.com/search?q=urldecode+bash

Source :https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell

GNU Awk

#!/usr/bin/awk -fn
@include "ord"
BEGIN {
   RS = "%.."
}
{
   printf "%s", $0
   if (RT != "") {
      printf "%s", chr("0x" substr(RT, 2)) 
   }
}

Source :https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell

Références

  • Urlencode et urldecode à partir d'une ligne de commande
  • Décodage de l'encodage d'URL (encodage en pourcentage)
  • Comment décoder une chaîne encodée en URL dans le shell ?
  • https://gist.github.com/cdown/1163649
  • Décodage d'URL Python sur la ligne de commande

Post précédent