IndexError: индекс кортежа вне диапазона postgresql - PullRequest
0 голосов
/ 21 ноября 2018

Я использовал функцию дайджеста модуля расширения pgcrypto для кодирования нескольких значений.Недавно я обнаружил, что некоторые значения URL, которые я пытаюсь кодировать, содержат '%,', которые выбрасывают

IndexError: индекс кортежа выходит за пределы диапазона.

Я сегодня часами пытался решить эту проблему, но пока я не исправил эту ошибку в своем коде.Как мне кодировать URL, который содержит специальные символы?

Это работает в pgAdmin4, но не в моем скрипте Python:

encode(digest('domainname.com/pub-cgi/retrieve.pl?doc=file%2F1999&zone_19=300%2A%20','sha256')

Как мне кодировать URL, который содержитспециальные символы?

1 Ответ

0 голосов
/ 21 ноября 2018

Проведя еще несколько исследований по переполнению стека, я нашел решение, которое было опубликовано несколько лет назад.

Декодирование экранированных символов в URL

Это код, который я использовал для решения моей проблемы кодирования:

# This section of code reformats a href with URL encoding
def unquote(url):
   return re.compile('%([0-9a-fA-F]{2})',re.M).sub(lambda m: chr(int(m.group(1),16)), url)

# URL with encoding - https://www.somedomainname.com/pubs/retrieve.pl?doc=some%2Ddocument%2Dname.pdf

print (unquote('https://www.somedomainname.com/pubs/retrieve.pl?doc=some%2Ddocument%2Dname.pdf'))

# Output - https://www.somedomainname.com/pubs/retrieve.pl?doc=some-document-name.pdf

Теперь, когда у меня есть этоПереформатированный URL, я могу использовать функцию дайджеста модуля расширения pgcrypto для кодирования с помощью хэша SHA-256.

encode(digest('https://www.somedomainname.com/pubs/retrieve.pl?doc=some-document-name.pdf','sha256')

СПЕЦИАЛЬНОЕ ПРИМЕЧАНИЕ: Я удаляю протокол href из URL-адресов перед их хэшированием, поскольку он предотвращает дублирование, что является моей проблемой.

...