PythonでAPIを叩くとき、特にHTTPSを使用する最近のREST APIでは、SSLErrorというエラーが出ることがあります。このエラーは何を意味し、どう回避すればいいのかについて説明します。

SSL認証とは何か

SSL認証は、「クライアントが、サーバーに対して、”あなたは信頼できる相手なんですよね?”」を知るための仕組みです。しかし、この認証過程で問題が発生すると、SSLErrorが発生します。

SSLErrorの回避方法

方法1: verify=Falseをセットする

これは「SSL認証はしません」というやり方で、通信先が本当に信用できる場合以外は使わないことをお勧めします。

方法2: verify=’SSL証明書のパス’をセットする

SSL認証で使う証明書を指定することで、その証明書の範囲でSSL認証を行います。

Pythonでの具体的な対処法

Pythonのurllib.requestモジュールを使用してAPIを叩く際にSSL認証エラーが発生した場合、以下のようにSSLContextを使用して認証方法を指定することで解決できます。

import json
import urllib.request, urllib.error
import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
request_url = "your_request_url"
PARAM_START_DATE = "2018-09-01"
PARAM_END_DATE = "2018-09-30"
API_KEY = "your_api_key"

headers = {'x-api-key': API_KEY, "Content-Type": "application/json"}
request_json = {
    "start_date": PARAM_START_DATE,
    "end_date": PARAM_END_DATE
}

req = urllib.request.Request(url=request_url, headers=headers, data=json.dumps(request_json).encode())
f = urllib.request.urlopen(req, context=context)
response = f.read()
f.close()

このコードでは、SSLContextを作成し、その中で認証方法をTLSv1に指定しています。そして、urlopen関数のcontextパラメータにこのSSLContextを渡すことで、指定した認証方法でAPIリクエストを行います。

以上がPythonでAPIを叩く際のSSL認証エラーの対処法になります。この情報が皆さんの開発に役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です