1. ホーム
  2. python

[解決済み] pythonでrequestsを使用する際にローカルの発行者証明書を取得できない

2022-03-08 23:33:17

質問

以下は私のコードです。

import requests;
url='that website';
headers={
  'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',
  'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
};
r = requests.get(url,headers=headers);
print(r);
print(r.status_code);

を実行すると、このようになりました。

requests.exceptions.SSLError:

HTTPSConnectionPool(host='www.xxxxxx.com', port=44 3)を使用しています。

url で最大再試行回数を超えました。xxxxxxxx (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]'))

certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)'))

どうすればいいのでしょうか?

解決方法は?

推奨しません を使用することです。 verify = False を、あなたの組織の環境で使用してください。これは、本質的にSSL検証を無効にすることです。

会社のプロキシを経由している場合、プロキシの証明書チェーンに置き換わってしまうことがあります。certifiが使用するcacert.pemに証明書を追加することで問題が解決するはずです。私も同じような問題がありました。以下は、私がこの問題を解決するために行ったことです。

  1. cacert.pemがあるパスを検索してください。

certifiをインストールしていない場合は、インストールします。コマンドを実行します。 pip install certifi

import certifi
certifi.where()
C:\\Users\\[UserID]\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\certifi\\cacert.pem

  1. ブラウザでURLを開いてください。URLから証明書のチェーンをダウンロードし、Base64エンコードされた.cerファイルとして保存します。

  2. 次に、メモ帳で cacert.pem を開き、ダウンロードした証明書の内容をすべて追加します ( ---Begin Certificate--- *** ---End Certificate--- ) を末尾に追加してください。