web-dev-qa-db-ja.com

urllib.error.URLError:<urlopenエラー不明なURLタイプ: 'https>

(Python 3.4.2)スクリプト内で「urllib.request.urlopen(url)」を実行すると、奇妙なエラーが発生します。 Pythonインタープリターで直接実行すると、正常に動作しますが、bashシェル(Linux)を介してスクリプト内で実行すると動作しません。

'string.join'メソッドを使用して文字列を作成しているためか、 'url'文字列と関係があると思います。

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インタープリターで完全に機能します)。

また、「url」文字列を「repr(url)」および「str(url)」でラップしてみました。私もこれを試しました:

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

誰が何が起こっているのか知っていますか?

-----編集-----
私はそれを考え出した。私のURLには「:」が含まれていましたが、urllibはそれを気に入らなかったと思います。 「%3A」に置き換えて動作しています。

7
GreenRaccoon23

文字列を手動で結合する代わりに、urllib.parse.urlencode()urllib.parse.urljoin()などの関数を使用してURLを作成する必要があります。 :-> %3A変換を処理します。例:

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

インストールしない場合、openssl-develが原因である可能性があります。

yum list installed|grep openssl

それをインストールし、作成後に再試行してください。

Sudo yum install openssl-devel
./configure
make
1
Baodi Di

私はそれを考え出した。私のURLには:が含まれており、urllibはその文字を使用できません。 %3Aに置き換えて、動作しています。 Webブラウザは通常:%3Aに自動的に変換しますが、urllibでは最初に変換する必要があります。

1
GreenRaccoon23