【问题标题】:FancyURLOpener failing since moving to python 3.1.2FancyURLOpener 在迁移到 python 3.1.2 后失败
【发布时间】:2011-01-31 12:52:32
【问题描述】:

我有一个应用程序正在从受密码保护的网站下载 .CSV 文件,然后进一步处理它。

我使用的是 FancyURLOpener,只是硬编码了用户名和密码。 (显然,在这种特殊情况下,安全性并不是一个高优先级)。

自下载 Python 3.1.2 以来,此代码已停止工作。在解决了它现在位于“请求”命名空间中的明显问题后,它以一种不太明显的方式崩溃了。

有谁知道实施发生的变化,以及现在如何使用它?文档似乎缺少示例。

这是代码的精简版:

import urllib.request;

class TracOpener (urllib.request.FancyURLopener) :
    def prompt_user_passwd(self, host, realm) :
        return ('andrew_ee', '_my_unenctryped_password')



csvUrl='http://mysite/report/19?format=csv@USER=fred_nukre'

opener = TracOpener();
f = opener.open(csvUrl);  # This is failing!
s = f.read();
f.close();
s;

为了完整起见,这里是整个调用堆栈:

Traceback (most recent call last):
  File "C:\reporting\download_csv_file.py", line 12, in <module>
    f = opener.open(csvUrl);
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1454, in open
    return getattr(self, name)(url)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1628, in open_http
    return self._open_generic_http(http.client.HTTPConnection, url, data)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1624, in _open_generic_http
    response.status, response.reason, response.msg, data)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1640, in http_error
    result = method(url, fp, errcode, errmsg, headers)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1878, in http_error_401
    return getattr(self,name)(url, realm)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1950, in retry_http_basic_auth
    return self.open(newurl)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1454, in open
    return getattr(self, name)(url)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1628, in open_http
    return self._open_generic_http(http.client.HTTPConnection, url, data)
  File "C:\Program Files\Python31\lib\urllib\request.py", line 1590, in _open_generic_http
    auth = base64.b64encode(user_passwd).strip()
  File "C:\Program Files\Python31\lib\base64.py", line 56, in b64encode
    raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    这是一个已知的错误:http://bugs.python.org/issue8123

    【讨论】:

      猜你喜欢
      • 2020-04-09
      • 1970-01-01
      • 2015-07-30
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2020-09-07
      相关资源
      最近更新 更多