urllib.error.URLError:<urlopen error =“”unknown =“”url =“”type:=“”'https =“”> </urlopen>

时间:2014-11-24 23:00:30

标签: python-3.x urllib

(Python 3.4.2) 当我运行&#39; urllib.request.urlopen(url)&#39;时,我发现了一个奇怪的错误。在脚本里面。如果我直接在Python解释器中运行它,它工作正常,但不是当我通过bash shell(Linux)在脚本中运行它时。

我猜它与“网址”有关。字符串,也许是因为我通过&#39; string.join&#39;来创建字符串。方法

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

&#39; url&#39;字符串打印完美,但当我尝试创建响应&#39;字符串,我得到这个输出:

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解释器中完美运行)。

我也试过包装“网址”。字符串&#39; repr(url)&#39;和&#39; str(url)&#39;。我也试过这个:

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

任何人都知道发生了什么?

- - - - - - - - EDIT
我想到了。我的网址有一个&#34;:&#34;在其中,我想urllib不是那样的。我用&#34;%3A&#34;现在它正在工作。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

我明白了。我的网址中包含:urllib无法使用该字符。我用%3A替换它,现在它正在工作。网络浏览器通常会自动将:转换为%3A,但urllib要求先将其转换。

答案 2 :(得分:0)

如果不安装,可能是由于openssl-devel造成的。

yum list installed|grep openssl

安装它,然后在制作完成后重试。

sudo yum install openssl-devel
./configure
make

答案 3 :(得分:0)

遇到错误的人 ValueError: unknown url type: 'http 要么 ValueError: unknown url type: b'http

同时使用urllib.request.Request打开如下所示的网址 'http://localhost/simple_form/insert.php'

只需将localhost更改为127.0.0.1

看起来Request方法正在URL中寻找domain.something