私は現在、RESTfulAPIのhttp呼び出しを自動化するコンパイラ用のPython言語プラグインを作成しています。ソケットモジュールとSSLモジュールを使用してログイン/認証を機能させることができましたが、この低レベルのアプローチでは、認証トークンとシークレットを取得するために応答を解析する際に潜在的な問題が発生するようです。リクエストモジュールは人気があり効率的ですが、特定の認証ニーズに対して適切に機能させることができないようです。Javaプラグインの認証に使用した.jksファイルから変換した.pemファイル(公開鍵のみを含む)の形式のトラストストアを使用しています。サーバーは、ユーザー名とパスワードがjson形式でリクエスト本文に送信されることを想定しています。これが私が使おうとしているコードです:
#Server and login data
...
host = 'localhost'
port = 8443
pem_file = "C:\\Users\\aharasta\\pycert.pem"
#Digest password with MD5 algorithm
m = hashlib.md5()
m.update(password)
encrypted_password = m.hexdigest()
url = <url>
data = {'userid': user_name, 'password': encrypted_password}
json_data = json.dumps(data)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain', 'Content \
Length': len(json_data)}
r = requests.post(url, headers = headers, data = json_data, cert = pem_file)
print(r)
このコードを実行すると、「証明書の検証に失敗しました」というSSLエラーが発生します。パラメータverify = False
またはを追加するverify = pem_file
と、サーバーから404応答を受け取ります。また、サーバーをデバッグモードで起動し、(検証パラメーターの1つを使用して)要求を実行すると、サーバーの認証方法やその他の方法に到達しないことにも注意してください。この問題に関する洞察や助けをいただければ幸いです。