(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)
' 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解释器中完美运行)。
我也试过包装“网址”。字符串&#39; repr(url)&#39;和&#39; str(url)&#39;。我也试过这个:
url = "".join(("'", baseurl, other_string, midurl, query, "'"))
任何人都知道发生了什么?
- - - - - - - - EDIT
我想到了。我的网址有一个&#34;:&#34;在其中,我想urllib不是那样的。我用&#34;%3A&#34;现在它正在工作。
答案 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