2016-10-08 15 views
0

URLに読み込むスクリプトがあります。 python app.pyを使ってcmdに実行するとうまく動作します。しかし、py2exeを使用して、それをコンパイルし、ここで私は、このエラーに.exeを.exeにコンパイルした後、ssl証明書の検証に失敗しました

entering main now..... 
Traceback (most recent call last): 
    File "strtojson.py", line 257, in <module> 
    File "strtojson.py", line 209, in main 
    File "requests\api.pyc", line 70, in get 
    File "requests\api.pyc", line 56, in request 
    File "requests\sessions.pyc", line 475, in request 
    File "requests\sessions.pyc", line 596, in send 
    File "requests\adapters.pyc", line 497, in send 
requests.exceptions.SSLError: [Errno 2] No such file or directory 

を取得しています.exeを実行した後、私は、サイトにアクセスする方法です。

url = 'https://www.sec.gov/cgi-bin/browse-edgar?company=&CIK=&type=8-k&owner=include&count=100&action=getcurrent' 
response = requests.get(url) 
html = response.content 
soup = BeautifulSoup(html, "html.parser") 

そしてここでは、勝利7 64ビット版でPython 2.7.12を使用して、私のsetup.py

from distutils.core import setup 
import py2exe 
setup(console=['strtojson.py'], options = {'py2exe' : {'packages': ['bs4', 'requests']}}) 

イムある私の推測では、Pythonは、信頼できるCAを見つけることができませんということです

答えて

0

(サーバーを検証するために必要な証明書)はexeには含まれていないのでもう使用できません。この場合、requests.getverify=Falseを使用すると効果があります。

しかし、これが実際に問題の原因であることを確認するためにのみ行う必要があります。より良い修正は、必要な信頼できるCAをファイルに格納し、このファイルをexeと一緒に出荷してverify='trusted-ca.pem'を使用することです。 https://curl.haxx.se/docs/caextract.htmlには、広く使われている信頼できるCAのコレクションを入手できます。

requestsは信頼できるCAとして一部の文字列を使用するといいですが、これはサポートされていないと思います。もちろん、信頼できるCAをexeファイル内の文字列として含めることができます。次に、requests.get(..., verify='temporary-ca-file.pem')を呼び出す前に、そのファイルから一時ファイルを作成します。

+0

ご提案いただきありがとうございます。実際に私はurrlib2に切り替えて、私にこのエラーを与えませんでした。 @Steffen – essramos

+0

@wasp:urllib2は、デフォルトでは証明書の検証が全く行われません。検証はエラーを意味しませんが、もちろん安全ではないことを意味します。 –

関連する問題