Python 3.7.3を使用してPHPファイルを自分のウェブサイトでホストしているファイルにGETリクエストを実行します。ただし、実行すると以下のエラーが発生します。 。Homebrewにrequests
〜pip3
をインストールしました。macOSMojaveを使用しています。
トレースバック(最新の呼び出しが最後):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py"、line 600、in urlopen chunked = chunked)
_ make_request self._validate_conn(conn)のファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py"、343行目
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py"、line 839、in _validate_conn conn.connect()
ファイル「/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connection.py」、行344、connect ssl_context = context)
ファイル「/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/ssl_.py」、行344、ssl_wrap_socket
return context.wrap_socket(sock、server_hostname = server_hostname)
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py"、line 412、in wrap_socket session = session
_ create self.do_handshake()のファイル「/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py」、行853、
ファイル「/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py」、1117行、do_handshake self._sslobj.do_handshake()内
ssl.SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました:ローカル発行者の証明書を取得できません(_ssl.c:1056)上記の例外の処理中に、別の例外が発生しました:
トレースバック(最新の呼び出しが最後):
ファイル「/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/adapters.py」、449行目、send timeout = timeout
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py"、638行目、urlopen _stacktrace = sys.exc_info()[ 2])
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/retry.py"、line 398、in increment raise MaxRetryError(_pool、url 、エラーまたはResponseError(原因))urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(Host = 'ijetlab.com'、port = 443):最大再試行回数が次のURLで超過しました:/api/api.php?one=1&two=2(原因SSLError(SSLCertVerificationError(1、 '[SSL:CERTIFICATE_VERIFY_FAILED] certificate verify failed:cannot be get local issuer certificate(_ssl.c:1056)'))))上記の例外の処理中に、別の例外が発生しました:
トレースバック(最新の呼び出しが最後):
ファイル "/Users/maxwellnewberry/Documents/test.py"、12行目、r = requests.get(url = URL、params = PARAMS)
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/api.py"、line 75、in get return request( 'get'、url 、params = params、** kwargs)
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/api.py"、line 60、in request return session.request(method = method 、url = url、** kwargs)
ファイル "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py"、533行目、リクエストresp = self.send(prep、 ** send_kwargs)
ファイル "/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py"、行646、send r = adapter.send(request、 ** kwargs)
ファイル「/ライブラリ/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/adapters.py」、514行目、send SSLError(e、request = request )requests.exceptions.SSLError:HTTPSConnectionPool(Host = 'ijetlab.com'、port = 443):最大再試行回数が次のURLで超過しました:/api/api.php?one=1&two=2(SSLError(SSLCertVerificationError(1、 ' [SSL:CERTIFICATE_VERIFY_FAILED]証明書の検証に失敗しました:ローカル発行者の証明書を取得できません(_ssl.c:1056) '))))
これがコードです:
# importing the requests library
import requests
# api-endpoint
URL = "https://ijetlab.com/api/api.php"
# defining a params dict for the parameters to be sent to the API
PARAMS = {'one':1, 'two':2}
# sending get request and saving the response as response object
r = requests.get(url = URL, params = PARAMS)
# extracting data in json format
data = r.json()
print(data['response'])
すべての検索で「Install Certificates.command」を実行するように指示されており、約100回実行しています。また、お客様にも証明書をインストールしてもらいました。
TL; DR
リモートのWebサイトが問題ではなく、Pythonのようです。 Webサイトを修正する以外に、これに対する修正はおそらくありません。
長い説明
あなたが扱っているウェブサイト/サーバーは明らかに正しく設定されていません。これは直接Pythonとは関係ありません。とはいえ、証明書のエラーは無視できます。例:
r = requests.get(url=URL, params=PARAMS, verify=False)
または、他の方法でPython=不足している証明書をポイントすることもできます(コメントの@ dave-thompson-085で指摘されています)。
ただし、サーバーが500: Internal Server Error
(curl
で検証済み)とContent-Length: 0
で明らかに応答するため、これは何の効果もありません。これは、処理のエラーを示すようです。 api.php
自体(つまり、処理するJSONがありません)。