3

いくつかのページでいいねの数をチェックするための短い Python スクリプトを書いています。Python requests モジュールを使用しています。以下に示すように、証明書に関する問題がありました。私は Web に関するプログラミングにかなり慣れていないので、何をすべきかわかりません。r = requests.get("http://www.google.com/")何かを正しく返しました。

トレースバック (最新の呼び出しが最後): r = requests.get(" https://graph.facebook.com/cocacola ") ルーチン: SSL3_GET_SERVER_CERTIFICATE: 証明書の検証に失敗しました

ありがとう!

4

2 に答える 2

3

そのエラーは、OpenSSLから発生しているように見えます。環境に何らかの構成があり、Requestsが証明書の場所を必要な証明書を含まないものに設定している可能性があります。

リクエストが証明書をチェックする可能性のある方法を調査してみてください。

  1. REQUESTS_CA_BUNDLE環境変数を使用して構成を探します。
  2. CURL_CA_BUNDLE環境変数を使用してカールの互換性チェックをチェックします。
  3. certifiパッケージをインポートできる場合は、証明書リストをインポートしようとします。

REQUESTS_CA_BUNDLE次のいずれかCURL_CA_BUNDLEがご使用の環境にあるかどうかを確認してください。

env | egrep "REQUESTS_CA_BUNDLE|CURL_CA_BUNDLE"

これらのいずれかが設定されている場合、Requestsは証明書を検証するときにその構成を使用している可能性があります。そうでない場合、Requestsはおそらくを使用してcertifiいます。その場合、おそらくそれを更新する価値があります:

pip install -U certifi

それができない場合は、に合格verify=Falserequests.getて検証手順をスキップしてもらいます。単にスイッチを切るのではなく、実際の問題を解決することをお勧めしますが、それはあなたがそれの根底に到達するのを助けるかもしれません。

于 2012-01-27T10:11:14.307 に答える
2

certifiをインストールしましたか? 同様の問題が最近私を悩ませました。GPL ライセンスの問題により、Kenneth Reitz と共同で SSL ライセンス バンドルを別のリポジトリに移動する必要がありました。

certifipypiの最新のものがインストールされている状態で次のことを試してみましたが、問題なく動作するようです。

>>> import requests
>>> r = requests.get("https://graph.facebook.com/cocacola") 
>>> r
<Response [200]>

ライセンスの問題についての詳細な議論は、このGithub Issue スレッドで利用できます( Full-discolure : 私はそのスレッドの最初の投稿者でした)。

新しいcertifiもので解決しない場合は、リクエスト Github Issue ページを試してみてください。彼らは非常に反応が良く、フレンドリーなコミュニティです!

編集:最新のcertifi状態で修正されない場合は、他の投稿者の提案を試すことを強くお勧めしますverify=False

于 2012-01-27T10:19:09.573 に答える