request.getでSSLのエラーが出たときの対処方法

### 私の環境
>iMac macOS Ventura13.2
python 3.10.4
selenium 4.18.1
requests 2.31.0

### 概要
Pythonで自作の新刊情報をTRC新刊図書オープンデータにアクセスしてdataを取得するprogramを、いつも通り実行したところ、<font color="red">突然、 r = requests.get(url)で以下のエラーが発生</font>しました。
![スクリーンショット 2024-03-17 9.06.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/b71011d1-9afd-c470-11ed-febdc2f36ff7.png)
ChatGPTに質問したところ![スクリーンショット 2024-03-17 9.07.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/9c0ce1c4-895f-8fe4-50e5-75227a0ea672.png)
ChatGPTは言葉では教えてくれますが、専門用語が多く具体的な対処方法がわからなかったので、、いろいろググってみたところ参考になるサイトに出会えたので、それを参考にして対処してみたところ、無事回復できました。

大変参考になりました。

https://rakuraku-engineer.com/posts/python-request-get-error-ssl/
### 結論
>A.「certifi/cacert.pem」に**直接**SSL証明書の情報を書き加える（/Users/〜/site-packages/certifi/cacert.pem）
B.**または**、「cacert.pem」**ファイルをコピー**して、これに**SSL証明書の情報を書き加え**、プロジェクトフォルダ直下に**貼り付ける**。そして**コードを一部修正**。<font color="blue"><—私はこっちを選択しました。</font>(理由は下記に記載)

### 具体的な流れ
#### １.cacert.pemに追記するSSL証明書の情報を取得する
このサイトで、調べたいホスト名「xxxx.com」<font color="gray">(私の場合はwww.trc.co.jp：TRC新刊図書オープンデータ)</font>を入力すると、SSL証明書の情報を取得できます。

https://www.ssllabs.com/ssltest/analyze.html

![スクリーンショット 2024-03-17 9.11.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/bee089eb-f35c-9c45-e2f5-8bf3c4471d21.png)

このページをスクロールすると<font color="green">"Click here to expand"</font> というボタンがあるのでこれをクリックします。
![スクリーンショット 2024-03-17 9.12.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/fe064976-1e44-380b-adb3-c821f78cdd2b.png)

<font color="green">”Click here to expand”</font>をクリックすると以下に展開します。
![スクリーンショット 2024-03-17 9.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/2454cd1c-e2bc-d06d-e858-30b6758d33de.png)

<font color="blue">Certification Paths</font>（認定パス）の欄の<font color="red">”apple”</font>（私の場合）をクリックした後、右に薄くある<font color="green">”Download chain”</font>をクリック
![スクリーンショット 2024-03-17 9.16.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/c5af7565-80d6-910f-4c0a-bd764f5dd0a1.png)

ボタンには**ダウンロード**とありましたが、クリックしてもサイトが開くだけでした。以下のようにしてFinderの**ダウンロードディレクトリ**にダウンロードしました（ご参考まで）。
![スクリーンショット 2024-03-17 11.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/7ce45be4-0829-7ae6-c372-7f23fa0642c8.png)

#### ２、次に,取得したSSL証明書の情報を貼り付けるために「cacert.pem」ファイルがどこにあるか"場所"を調べます。
ターミナルに<font color="magenta">% pip show certifi</font>　と入力して実行すれば調べられます。
使用状況によっては多少違うと思いますが<font color="green">”Location”</font>の場所にそのファイルはあります。
<font color="gray">Location: /Users/xxxxxxxxxxx/.pyenv/versions/3.10.4/lib/python3.10/site-packages</font>
![スクリーンショット 2024-03-17 9.33.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/bee4d967-2e30-7e97-6a12-6142cfb728c7.png)

#### 3、次にFinderで「cacert.pem」ファイルまで辿ります。
##### a.　そのために、まず隠しファイルが見える状況にします。
>Finderを開き、自分の名前のところで、Finderを開き、ショートカット：Command + Shift + .(ドット)で隠しファイルが見える状態になります。
##### b.　Locationにあるパスの通り、Finderでディレクトリを順番に辿っていきます。
>私の場合は
/Users/xxxxxx/.pyenv/versions/3.10.4/lib/python3.10/site-packages/certifi/cacert.pem
にありました。
##### c.　この場所でファイルを開きダウンロードした証明を貼り付けるか、または「cacert.pem」ファイルをコピーするか選択します。（私は「cacert.pem」ファイルをコピーする方法にしました。）
>ファイルを開くには、![スクリーンショット 2024-03-17 9.51.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/c2d15135-e58d-6cb3-8bed-3afd39841646.png)
最初私は、普通に「開く」を選んだところ、チェーンアクセス.appが起動して、「チェーンアクセス・・・につながりません」から画面がフリーズするというトラブルが発生し強制終了（起動ボタンを押すしか終了できなかった）することになりましたので、この方法がいいと思います。![スクリーンショット 2024-03-17 9.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/5293d1d6-8b63-19a9-c9ee-ca7ce3a33abc.png)
私がファイルのコピーを選んだ理由としては
>・他のプログラムにも影響する。
・新刊情報を取得するため、「TRC新刊図書オープンデータ」にアクセスする時にエラー出るだけだから。
・本当にできるか心配。

以上の理由から、「acert.pem」ファイルをコピーして、プロジェクトフォルダ直下に貼り付ける方法を選びました。

##### d./site-packages/certifi/cacert.pemで開いた<br>又は,<br>コピーしたacert.pemファイルに、先ほどダウンロードしたファイルを貼り付ける。
これは、/site-packages/certifi/cacert.pemへ直接単純に貼り付けるにしても、コピーしたファイルに貼り付けるにしても同じです。単純に「cacert.pem」ファイルの最後にコピー＆ペーストするだけです。
![スクリーンショット 2024-03-17 9.55.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/457b4147-f2e0-e9e4-9325-1ac1d55a4d7c.png)

#### 4、最後に<font color="magenta">プロジェクトフォルダ直下に貼り付ける</font>方法を選んだ場合は.pyのコードの修正をします。
なお、直接/Users/xxxxxx/.pyenv/versions/3.10.4/lib/python3.10/site-packages/certifi/cacert.pemにダウンロードしたファイルを貼り付けた場合は、コードの修正は不要です。これで終わりです。

プロジェクトフォルダ直下に貼り付ける方法を選んだ場合は,<font color="red">verify='cacert.pem'</font>を付記してください。これで終わりです。

（現状）　r = requests.get(url)#urlを取得

（修正後）r = requests.get(url, verify='cacert.pem')

### 後記
やってみれば簡単でした。私が時間がかかったのは、
>・最初の「SSL証明書の情報を取得する」サイトが全て英語で、参考にしたサイトと若干フォームが違っていたため英訳したりボタンを押すのに躊躇したことや
・「acert.pem」ファイルを開く際に、フリーズという事態に直面した

ことでした。
でも、これで折角自作した新刊情報をseleniumで取得するprogramを再び活かすことができるようになりました。