(Python3.4.2)当我在脚本中运行'urllib.request.urlopen(url)‘时,出现了一个奇怪的错误。如果我在Python解释器中直接运行它,它就能正常工作,但当我通过bash (Linux)在脚本中运行它时,它就不能工作了。
我猜想它与'url‘字符串有关,可能是因为我通过'string.join’方法创建了字符串。
import urllib.request
url = "".join((baseurl, other_string, midurl, query))
response = urllib.request.urlopen(url)
'url‘字符串打印得很好,但是当我尝试创建'response’字符串时,我得到了如下输出:
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解释器中工作得很好)。
我还尝试用'repr(url)‘和'str(url)’包装'url‘字符串。我也试过这个:
url = "".join(("'", baseurl, other_string, midurl, query, "'"))
有人知道怎么回事吗?
-编辑-编辑
我想通了。我的url中有一个":“,我想urllib不喜欢这样。我把它换成了"%3A“,现在它开始工作了。
发布于 2015-01-08 11:28:39
您应该使用urllib.parse.urlencode()
、urllib.parse.urljoin()
等函数来构造urls,而不是手动连接字符串。它将负责:
-> %3A
的转换,例如:
>>> import urllib.parse
>>> urllib.parse.quote(':')
'%3A'
发布于 2015-01-07 23:47:21
我想通了。我的url中有一个:
,urllib
不能使用这个字符。我用%3A
代替了它,现在它开始工作了。Web浏览器通常会自动将:
转换为%3A
,但是urllib
要求首先转换它。
发布于 2018-06-27 03:24:47
可能由于openssl-发展,如果你不安装它。
yum list installed|grep openssl
安装后再试一次。
sudo yum install openssl-devel
./configure
make
https://stackoverflow.com/questions/27115803
复制相似问题