urllib.error.URLError: urllib.error.URLError: (url

2019-05-12 07:56发布

(Python的3.4.2)当我运行“urllib.request.urlopen(URL)”的脚本里面我有一个奇怪的错误。 如果我直接在Python解释器中运行它,它工作正常,但不是当我经过的bash shell(Linux)的运行的脚本里面。

我猜它是与“网址”字符串,也许是因为我创建通过“的string.join”方法的字符串。

import urllib.request
url = "".join((baseurl, other_string, midurl, query))
response = urllib.request.urlopen(url)

“网址”字符串打印完美,但是当我尝试创建“响应”的字符串,我得到这样的输出:

File "./script.py", line 124, in <module>
    response = urllib.request.urlopen(url)
  File "/usr/lib/python3.4/urllib/request.py", line 153, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 455, in open
    response = self._open(req, data)
  File "/usr/lib/python3.4/urllib/request.py", line 478, in _open
    'unknown_open', req)
  File "/usr/lib/python3.4/urllib/request.py", line 433, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 1244, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: 'https>

由于Python是与我的计算机上支持SSL(这些命令在Python解释器完美地工作)编制。

我也试着用包装“再版(URL)”和“STR(URL)”“网址”字符串。 我已经试过这太:

url = "".join(("'", baseurl, other_string, midurl, query, "'"))

任何人都知道这是怎么回事?

- - -编辑 - - -
我想到了。 我的网址有一个“:”在里面,我想的urllib不喜欢这一点。 我用“%3A”代替它,现在它的工作。

Answer 1:

您应该使用urllib.parse.urlencode() urllib.parse.urljoin()等函数来构造网址,而不是手动加入字符串。 这将照顾: - > %3A转换例如:

>>> import urllib.parse
>>> urllib.parse.quote(':')
'%3A'


Answer 2:

我想到了。 我的网址有:在里面, urllib不能使用的字符。 我用它代替%3A ,现在它的工作。 Web浏览器通常转换:%3A自动,但urllib要求将其先转换。



Answer 3:

可能是由于OpenSSL的-devel的,如果你不安装它。

yum list installed|grep openssl

安装并进行后再试。

sudo yum install openssl-devel
./configure
make


文章来源: urllib.error.URLError: