IndexError:元组索引超出范围PostgreSQL

时间:2018-11-21 00:42:02

标签: python python-3.x postgresql pgcrypto

我一直在使用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 :(得分:0)

在对Stack Overflow进行了更多研究之后,我找到了几年前发布的解决方案。

Decode escaped characters in 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')

特殊说明::在对URL进行散列处理之前,我先从URL中删除了href协议,因为它可以防止重复,这是我所关心的。