python3.x请求使用unicode ch重定向

2024-04-26 03:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3.x中,我试图用requests.get()获得以下URL:http://www.finanzen.net/suchergebnis.asp?strSuchString=DE0005933931(这个URL由一个带有搜索字符串DE0005933931的基URL组成)。在

请求被重定向(通过HTTP状态代码301)到浏览器中的http://www.finanzen.net/etf/ishares_core_dax%AE_ucits_etf_de(在URL中包含character 0xAE字符®)。将requests.get()与重定向的URL一起使用也可以。在

当尝试使用Python 2.7获取搜索字符串URL时,一切正常,我得到重定向响应,使用Python 3.x得到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 21: invalid start byte

测试此项的代码段:

^{pr2}$

更多信息:

  • 我正在使用python3.6.3和requests.__version__ = '2.18.4'开发windows7,但是我 其他Python版本(3.4、3.5)也会出现相同的错误。在
  • 使用其他搜索字符串,所有的东西都可以在python3.x上运行, 例如 http://www.finanzen.net/suchergebnis.asp?strSuchString=LU0274208692
  • 有趣的是,我甚至得到了一个Internal Server Errorhttps://www.hurl.it试图获得上述URL。也许这不是Python的问题。在

你知道为什么这在Python2.7中有效,而在Python3.x中不行,我能做些什么?在


Tags: 字符串httpurlgetnetwwwrequests重定向
1条回答
网友
1楼 · 发布于 2024-04-26 03:03:22

服务器以一个编码为Latin-1的URL进行响应,而不是URL编码的URL;非ASCII字节显示为0x??十六进制转义符:

Location: /etf/ishares_core_dax0xAE_ucits_etf_de

0xAE字节没有有效的URL字符;服务器在此违反了标准。他们应该发送的是

^{pr2}$

或者

Location: /etf/ishares_core_dax%C2%AE_ucits_etf_de

对URL的拉丁语-1或UTF-8编码使用转义数据。在

我们可以通过返回未更改的Location头来修补requests以使其在面对此错误时更加健壮:

from requests.sessions import SessionRedirectMixin

def get_redirect_target(
        self, resp, _orig=SessionRedirectMixin.get_redirect_target):
    try:
        return _orig(self, resp)
    except UnicodeDecodeError:
        return resp.headers['location']

SessionRedirectMixin.get_redirect_target = get_redirect_target

应用此修补程序后,重定向按预期工作。在

改进位置处理。在

相关问题 更多 >

    热门问题